Я настраиваю новый сервер с помощью node.js и хочу обеспечить аутентификацию пользователя с использованием passport.js с использованием промежуточного программного обеспечения на основе файлов cookie, называемых express-session.
После того, как пользователь вошел в систему, я хочу запретить пользователю входить на другую страницу учетной записи, изменив URL-адрес www.website.come / tryrandomusername, так как он все еще вошел в систему.
Я уже написал промежуточное программное обеспечение, чтобы проверить, вошел ли пользователь в систему или нет, и использую его для проверки моего маршрута "/: username", чтобы проверить то же самое.
// User (stored in mongodb) account page - Show Route
// isLoggedIn is a middleware function at the bottom to check if user // is still logged in
app.get("/:username", isLoggedIn, (req, res) => {
// stop user from accessing another accounts if they're logged in or are loggin in
if(req.params.username == req.user.username) {
// render account page and pass the current user session details to template
res.render("account", {user: req.user});
} else {
// if logged in user types the name of another user in address bar destroy their session and redirect to login page
req.session.destroy((err) => {
if(err) {
console.error(err);
} else {
res.redirect("/account/login");
}
});
}
});
// Middleware function isLoggedIn() to check if user is still authenticated
function isLoggedIn(req, res, next) {
if(req.isAuthenticated()) {
return next();
}
res.redirect("/account/login");
}
Я хотел, чтобы вошедший в систему пользователь не мог получить доступ к странице учетной записи другого пользователя только потому, что он вошел в систему. Поэтому я сравниваю объект "пользователь", который Express-Session создает для меня после входа пользователя в систему. чтобы проверить запрошенное имя пользователя (в URL) и req.user.name, то есть фактическое имя пользователя вошедшего в систему пользователя.
Теперь пользователь может войти в систему, но когда он либо запрашивает обновление страницы "/: username", либо запрашивает "/ someotherusername", он перенаправляется на страницу входа.
Буду признателен, если кто-нибудь поможет мне понять, что я делаю не так? Должен ли я сделать промежуточное ПО для сравнения вошедшего в систему пользователя и запроса имени пользователя в «/: имя пользователя»?