#javascript #mongodb #express-session #edge.js
Вопрос:
Я создал страницу входа и регистрации, используя шаблоны edge, и настроил ее так, чтобы, когда кто-то входит в систему, она создавала сеанс для моего MongoDB. Сеансы отображаются, и если я дважды войду в систему с одним и тем же пользователем, это не приведет ко второму идентичному сеансу. Однако предполагается, что он больше не будет отображать кнопки «вход» и «регистрация», а вместо этого будет отображаться кнопка «выход».
кроме того, когда кто-то вошел в систему, это должно позволить ему создать сообщение (блог), но при нажатии этой кнопки он перенаправляет меня на домашнюю страницу, как будто я вообще не вошел в систему.
Это мой контроллер входа в систему:
const bcrypt = require('bcrypt')
const User = require('../database/models/user')
module.exports = (req, res) => {
const {
email,
password
} = req.body;
// try to find the user
User.findOne({
email
}, (error, user) => {
if (user) {
// compare passwords.
bcrypt.compare(password, user.password, (error, same) => {
if (same) {
req.session.userID = user._id
res.redirect('/')
} else {
res.redirect('/auth/login')
}
})
} else {
return res.redirect('/auth/login')
}
})
}
Если адрес электронной почты и пароль совпадают, он перенаправляется обратно на домашнюю страницу, что соответствует текущему поведению.
Вот сеанс, который создается в моей базе данных: сеанс MongoDB
Это промежуточное программное обеспечение для аутентификации, которое я создал:
const User = require('../database/models/user')
module.exports = (req, res, next) => {
User.findById(req.session.userId, (error, user) => {
if (error || !user) {
return res.redirect('/auth/login')
}
next()
})
}
Есть ли что-то, что я делаю не так в этом? Спасибо всем, кто найдет время прочитать это, дайте мне знать, если мне понадобится дополнительная информация.