Intenté desesperadamente encontrar un método simple para proteger mi API, pero aún no he encontrado uno que funcione. A diferencia de muchas API RESTful, mi API no necesita inicios de sesión de usuario, tokens que expiren u otros métodos de autenticación complejos (aunque muy seguros), lo que hace que la mayoría de los tutoriales sean inutilizables.
El único requisito que tengo es que una solicitud POST para registrar un registro en mi base de datos en una ruta debe estar protegida, mientras que una solicitud GET para acceder a los registros en esa misma ruta debe estar desprotegida. Los clientes que están registrando registros son de confianza y yo proporcionaría sus credenciales de forma privada.
He intentado usar este método de autenticación básica aquí:
var basicAuth = require('basic-auth');
var auth = function (req, res, next) {
function unauthorized(res) {
res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return res.send(401);
};
var user = basicAuth(req);
if (!user || !user.name || !user.pass) {
return unauthorized(res);
};
if (user.name === 'foo' && user.pass === 'bar') {
return next();
} else {
return unauthorized(res);
};
};
Pero las solicitudes POST todavía funcionaron cuando usé el nombre de usuario y la contraseña incorrectos.
Realmente ya no sé qué buscar, ya que pensé que la autenticación básica así funcionaría.
EDITAR: Logré que esto funcionara después de cambiar un par de cosas después de app.post, que había pasado por alto.