从服务器端调用 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 将其用于 serialize
和 deserialize
用户,它所做的是将用户 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 在上述评论中提供的帮助。
从客户端调用时,以下函数调用(它本身调用 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 将其用于 serialize
和 deserialize
用户,它所做的是将用户 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 在上述评论中提供的帮助。