node.js - password - La estrategia de pasaporte local realizada la devolución de llamada no pasa el mensaje json de error
passport npm (1)
El valor del message
que está configurando se almacena en sesión y flash. No creo que el pasaporte tenga ninguna opción para enviar un mensaje de error json. Pero puede pasar una devolución de llamada en el método de authenticate
y enviar un mensaje desde allí:
app.post(''/login'', function(req, res, next ){
passport.authenticate(''local'', function(err, user, info) {
if (err) { return next(err) }
if (!user) { return res.json( { message: info.message }) }
res.json(user);
})(req, res, next);
});
Estoy intentando pasar un mensaje JSON cuando falla la autenticación, usando la devolución de llamada realizada en LocalStrategy, pero todo lo que recibo es 401 y una cadena "No autorizada" en la respuesta.
var express = require(''express'');
var bodyParser = require(''body-parser'');
var passport = require(''passport'');
var LocalStrategy = require(''passport-local'').Strategy;
var app = express();
app.use(bodyParser.json());
app.use(passport.initialize());
passport.serializeUser(function(user, done) {
done(null, user.email);
});
var strategy = new LocalStrategy({ usernameField: ''email'' },
function (email, password, done) {
if (email === ''[email protected]'' && password === ''pass'') {
return done(null, { email: ''[email protected]'' });
} else {
// never get this json object on the client side when posting invalid credentials
return done(null, false, { message: ''invalid email or password'' });
}
}
);
passport.use(strategy);
app.post(''/login'', passport.authenticate(''local''), function(req, res) {
console.log(req.user);
res.json(req.user);
});
app.get(''/'', function(req, res) {
res.json({ message: ''hello!'' });
});
var server = app.listen(3000, function() {
console.log(''api is listening on '', server.address().port);
});
paquete.json
{
"name": "passport_example",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo /"Error: no test specified/" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.13.3",
"express": "^4.13.3",
"passport": "^0.2.2",
"passport-local": "^1.0.0"
}
}
¿Qué estoy haciendo mal?