Зарегистрированный пользователь перенаправлен на страницу входа на странице обновления - PullRequest
0 голосов
/ 21 апреля 2019

Я настраиваю новый сервер с помощью 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", он перенаправляется на страницу входа.

Буду признателен, если кто-нибудь поможет мне понять, что я делаю не так? Должен ли я сделать промежуточное ПО для сравнения вошедшего в систему пользователя и запроса имени пользователя в «/: имя пользователя»?

...