strategy password nodejs node management authenticate node.js express passport.js passport-local

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?