Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用cookie会话和passport.js在注册时启动会话?_Node.js_Express_Passport.js_Express Session_Cookie Session - Fatal编程技术网

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')
  })
}