未定义Passport身份验证中间件

时间:2018-06-04 04:32:24

标签: 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.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以返回响应。

1 个答案:

答案 0 :(得分:0)

我相信当你使用护照策略时,你应该返回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() */ 

})

要回答您的问题,res中没有添加passport.use我认为他们只有passReqToCallback这就是为什么您只能使用req