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,根据我的经验,它将不会验证任何东西。这根本行不通。