IsAuthenticated не работает как функция, использующая nodejs с локальным паспортом

Я новичок в node js и пытаюсь проверить, аутентифицирован ли пользователь после регистрации.

Я использую паспорт, паспорт-местный и паспорт-местный-мангуст, чтобы сохранить пользователя в базе данных mongoDB.

Вот как пользователь регистрируется:

app.post("/register", function (req, res) {
  const username = req.body.username;
  const password = req.body.password;

  User.register({username: username}, password, function (err, user) {
    if (err) {
      console.log(err);
      res.redirect("/register");
    } else {
      passport.authenticate("local")(req, res, function () {
        res.redirect("/drive");
      });
    }
  });

});

И вот как я пытаюсь проверить аутентифицирован ли пользователь:

app.get("/drive", function (req, res) {
  if (req.isAuthenticated()) {
    res.render("drive");
  } else {
    res.redirect("/login");
  }
});

Если я использую isAuthenticated() в качестве вызова функции, эта логика не будет работать, и я всегда буду перенаправляться на страницу входа, если я использую isAuthenticated. (не вызов функции), эта логика будет работать.

Я не понимаю, в чем разница между этими двумя (в контексте пакета паспорта) и почему один работает, а другой нет.


person Pedro Dias    schedule 05.07.2020    source источник


Ответы (1)


Удалось исправить это, это была довольно простая проблема.

Когда я объявляю параметры сеанса:

app.use(session({
  secret: 'Our little secret.',
  resave: false,
  saveUninitialized: false,
  cookie: {secure: true}
}))

Я использую cookie: {secure: true}, и, поскольку я работаю в локальной среде без HTTPS, как только я аутентифицируюсь, я деаутентифицируюсь из-за того, что файл cookie, который должен быть сгенерирован, может работать только с HTTPS.

Решение состоит в том, чтобы просто установить для параметра cookie значение false и вызвать isAuthenticated().

person Pedro Dias    schedule 05.07.2020