Как инициировать сеанс при регистрации с Cook ie -сессией и паспортом. js? - PullRequest
1 голос
/ 14 июля 2020

У меня есть роутер /register для регистрации пользователя. Для простоты я использую cookie-session (аналогично) вместо express-session.

Я застрял в той части, где мне нужно аутентифицировать пользователя при регистрации. Меня смущает функциональность req.sessions.save() и req.login(). Я знаю, что req.login() предоставляется в паспорте. js, но я не понимаю, какой из них предоставляет объект req.session.

Я новичок в паспорте. 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')
                    })
                })
            });
        }
    });
})

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

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;
0 голосов
/ 16 июля 2020
passport.authenticate('local')(request, response, () => {
  req.session.save((err) => {
    if (err) {
      return next(err)
    }
    res.redirect('http://localhost:3000')
  })
}
...