2

我有一个/register用于注册用户的路由器。我现在使用cookie-session(类似的)而不是express-session为了简单。

我被困在需要在注册时对用户进行身份验证的部分。req.sessions.save()我对and的功能感到困惑req.login()我知道req.login()是由 passport.js 提供的,但我不明白是哪一个提供了 req.session 对象。

我是 passport.js 的新手,并且已经广泛阅读了大量文章、视频和 StackOverflow 问题来积累我的知识。老实说,到目前为止,护照文件一直很痛苦。我仍然对注册时的会话启动应该如何工作感到困惑。许多文章跳过了注册部分。因此,我请求有关如何做到这一点的帮助。

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

2 回答 2

0
passport.authenticate('local')(request, response, () => {
  req.session.save((err) => {
    if (err) {
      return next(err)
    }
    res.redirect('http://localhost:3000')
  })
}
于 2020-07-16T11:22:29.973 回答
0

const express = require("express");
const router = express.Router();
const passport = require("passport");

router.post("/register", (req, res, next) => {
  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();
    }
  });

  passport.authenticate("local", function (err, user, info) {
    if (err) {
      return res.status(400).json({ errors: err });
    }
    if (!user) {
      return res.status(400).json({errors:"No user found."});
      

      // or save User : new User({email: req.body.email}).save();
    }

    req.login(user, function (err) {
      if (err) {
        return res.status(400).json({ errors: err });
      }

      req.session.save((err) => {
        if (err) {
          return next(err)
        }
        res.redirect('http://localhost:3000')
      });      
      return res.status(400).json({ success: `logged in ${user.id}` });
    });
  })(req, res, next);
});

module.exports = router;

于 2020-07-16T11:32:03.403 回答