Node.js 未定义Passport身份验证中间件
我有下面的代码Node.js 未定义Passport身份验证中间件,node.js,express,passport.js,Node.js,Express,Passport.js,我有下面的代码 passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password', passReqToCallback: true }, function(req,username, password, next) { console.log('req' + req.body.socialID ); var res =""; userController.V
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
},
function(req,username, password, next) {
console.log('req' + req.body.socialID );
var res ="";
userController.ValidateLogin(req,res,function(userDetails){
console.log('g d' + userDetails);
req.user = userDetails;
return next(null,userDetails);
});
}));
如果出现以下错误,我将从usercontroller.validatelogin返回响应
return res.send({ Status:403, Msg: 'There was a problem while fetching the record' });
它说res.send不是一个方法。
如何在usercontroller.validatelogin中传递res以返回响应。我认为当您使用passport策略时,您应该返回
done()
。在那里,如果用户经过验证,就可以传递用户。例如,如果您检查数据库中没有用户,然后您成功地创建了它,则可以执行以下操作:
return done(null, user, { message: "Hello user from db" });
如果使用了用户名,则为用户传递false:
return done(null, false, { message: "User exists . Try again" });
然后在你的路线上你可以
app.get("/route", (req, res, next) => {
passport.authenticate(strategyName, function (err, user, info) {
/*now you have access to res and now you can do if condition to do
stuff when there is a user don't forget to do req.login() */
})
要回答您的问题,在
passport中没有添加res
。使用我想他们只有passReqToCallback
这就是为什么您只能使用req
是的,我可以返回,但我如何返回状态和消息您可以在路线中这样做。消息位于info
中,请检查user
是否为false,您可以执行res.send(info)done
,回调会自动将消息放入info
。您在req、用户名、密码、next
中的第四个参数应该是done
而不是next
。如果您不使用done
passport,根据我的经验,它将不会验证任何东西。这根本行不通。