从服务器端调用 passport.authenticate

Calling passport.authenticate from Server Side

从客户端调用时,以下函数调用(它本身调用 passport.use 函数)工作正常。但是,由于我对用户进行身份验证的方式,我不需要从客户端调用此函数,但我想从服务器端调用它,以便它仍会在客户端创建一个 cookie:

 app.post("/api/login", (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
   if (err) {
     return next(err)
   }
   if (!user) {
     return res.status(400).send([user, "Cannot log in", info])
   }
   req.login(user, err => {
     res.send("Logged in")
   })
  })(req, res, next)
 })

如何修改此函数以便从服务器端调用它并仍在客户端上创建 cookie?

通过使用快速会话,passport 将其用于 serializedeserialize 用户,它所做的是将用户 ID 添加到已经存在的会话 ID,以设置护照来做到这一点,你必须将这 2 个功能添加到你的策略中

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

只需添加以下代码即可生成cookie。

 req.login(add, err => {
   ...
 }) 

感谢 Sven.hig 在上述评论中提供的帮助。