Node.js 如何使用cookie会话和passport.js在注册时启动会话?
我有一个用于注册用户的Node.js 如何使用cookie会话和passport.js在注册时启动会话?,node.js,express,passport.js,express-session,cookie-session,Node.js,Express,Passport.js,Express Session,Cookie Session,我有一个用于注册用户的/register路由器。为了简单起见,我现在使用的是cookie会话(类似),而不是express会话 我被困在注册时需要验证用户身份的部分。我对req.sessions.save()和req.login()的功能感到困惑,我知道req.login()是由passport.js提供的,但我不知道是哪一个提供了req.session对象 我是passport.js新手,为了积累知识,我阅读了大量的文章、视频和问题。老实说,到目前为止,护照文件是一件很痛苦的事情。我仍然对注册
/register
路由器。为了简单起见,我现在使用的是cookie会话
(类似),而不是express会话
我被困在注册时需要验证用户身份的部分。我对req.sessions.save()
和req.login()
的功能感到困惑,我知道req.login()
是由passport.js提供的,但我不知道是哪一个提供了req.session对象
我是passport.js新手,为了积累知识,我阅读了大量的文章、视频和问题。老实说,到目前为止,护照文件是一件很痛苦的事情。我仍然对注册时的会话启动应该如何工作感到困惑。许多文章跳过了注册部分。因此,我请求帮助如何做到这一点
router.post('/register', (req, res, next) => {
console.log(req.body)
User.findOne({email: req.body.email}).then((currentUser) => {
if(currentUser){ // already exists
res.render('login')
} else { // if not, create user in our db
new User({
email: req.body.email
}).save().then((newUser) => {
passport.authenticate('local')(req, res, () => {
//>>>> //**This is where I don't know what to do**
req.session.save((err) => {
if (err) {
return next(err)
}
res.redirect('http://localhost:3000')
})
})
});
}
});
})
const express=require(“express”);
const router=express.router();
const passport=需要(“护照”);
路由器.post(“/寄存器)”,(请求、恢复、下一步)=>{
User.findOne({email:req.body.email})。然后((currentUser)=>{
如果(当前用户){//已存在
res.render('login')
}否则{//如果不是,请在数据库中创建用户
新用户({
电子邮件:req.body.email
}).save();
}
});
passport.authenticate(“本地”),功能(错误、用户、信息){
如果(错误){
返回res.status(400).json({errors:err});
}
如果(!用户){
返回res.status(400).json({errors:“找不到用户”。});
//或者保存用户:新用户({email:req.body.email}).save();
}
请求登录(用户、功能(错误){
如果(错误){
返回res.status(400).json({errors:err});
}
请求会话保存((错误)=>{
如果(错误){
返回下一个(错误)
}
reshttp://localhost:3000')
});
返回res.status(400.json)({success:`logged-in${user.id}`});
});
})(req、res、next);
});
module.exports=路由器代码>虽然这个答案试图解决这个问题,但如果它有一个关于如何解决问题的描述,以便OP和其他人可以从中学习,它会更有用。这不是我在问题中发布的相同代码吗?我认为这样做是为了重定向链接,但在您最初注册时会显示未经授权的。passport.authenticate()
也会调用req.login()
,因此它是多余的,我认为调用两次是不对的。
passport.authenticate('local')(request, response, () => {
req.session.save((err) => {
if (err) {
return next(err)
}
res.redirect('http://localhost:3000')
})
}