потерян userId при переходе на следующие страницы - Node js - PullRequest
2 голосов
/ 02 августа 2020

У меня есть код, который проверяет, существует ли данный токен с максимальной длиной = 6 (см. Изображение ниже) в mongodb, и если да, он будет перенаправлен на страницу регистрации,

введите описание изображения здесь

статус кода:

1 - проверочный токен работает отлично и перенаправляет, как ожидалось, на /api/users/update/:token также создает req.session.userId = user._id, чтобы использовать его позже на этапе регистрации

const checkToken = async (req, res, next) => {
    const token = req.body.token
 const email = req.body.email
    User.findOne({ token: token },
        (err, user) => {
            if (!user) {
                /* const error = new Error('Token not Found');
                 error.status= 406;
                 return next(err, error);
     */

                res.redirect('/api/login');
            } else {
                console.log(user.isActivated)
                if (user.isActivated === false) {
                   
                    
                    res.redirect('/api/users/update/'+ token)
                    User.updateOne({ token: token }, {
                        $set: {

                            'isActivated': true,
                            'email': email

                        }

                    }).exec((err) => {
                        if (err) throw err;
                        console.log("Token is Activated");
                    })
                    
                  console.log(user)
                  console.log(req.session)
                  req.session.userId= user._id
                  console.log( req.session.userId) // here everything works perfectly and session is created the maxAge is 2 days
                 
                } else{
                    req.session.reset()
                    res.redirect('/api/login');
                }
                // res.redirect('/api/users/'+ id +'/update')
            }

        })

}

2- регистрационный код также работает, но проблема в том, что когда я нажимаю кнопку «Подтвердить токен» и появляется новая страница, id, который я извлек из функции checktoken, теряется, и я не могу » t найти, чтобы сохранить этот идентификатор и использовать его на следующей странице

const updateUser = async (req, res, next) => {
    
    const uname = req.body.lastName.concat('.', req.body.lastName);//concat req.body.lastName + "." + req.body.lastName
    
    let token = req.session.userId; // the problem is here nothing found and the userId is undefined
    console.log(token)
    const password = req.body.password.trim();
    const hashedPassword = await bcrypt.hash(password, 10);
    User.findByIdAndUpdate(token, {
        firstName: req.body.firstName.trim() || "Untitled User",
        lastName: req.body.lastName.trim() || "N /A ",
        userName: uname || "N /A ",
        email: req.body.email.trim() || "N /A ",
        birthDay: req.body.datetimepicker || "N /A ",
        gender: req.body.gender || "N /A ",
        password: hashedPassword
    }, { new: true })
        .then(user => {
            if (err) {
                return res.status(404)
            } else {
                res.send(user);
            }

        }).catch(err => {
            if (err.kind === 'ObjectId') {
                return res.status(404).send({
                    message: "User not found with id " + token
                });
            }
            //change to true statment 200 = OK 
            res.redirect('/api/login');
            /*return res.status(200).send({
                message: "The user with this credential is created " + token
            });
           */
        });
};

есть ли способ отправить идентификатор или сохранить его где-нибудь, чтобы найти позже, когда я меняю страницы или, может быть, я сделал какую-то ошибку что я этого не заметил

это сеансы, которые я использую

app.use(session({
  name: 'connect_id',
  secret: 'secret',
  rolling:true,
  resave: true,
  saveUninitialized: false,
  cookie: {
       expires: 24 * 60 * 60 * 1000 * 2
  },
  store: new MongoStore({
      mongooseConnection: mongoose.connection,
      ttl: 24 * 60 * 60 // Keeps session open for 1 day
  })
}));

Могу ли я помочь мне в решении этой проблемы?

С уважением

...