У меня есть код, который проверяет, существует ли данный токен с максимальной длиной = 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
})
}));
Могу ли я помочь мне в решении этой проблемы?
С уважением