IsAuthenticated在使用带有本地护照的

时间:2020-07-05 17:55:17

标签: node.js express passport.js passport-local

我是节点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 <,我将始终重定向到登录页面。 / strong>(不是函数调用),此逻辑将起作用。

我不明白这两者(在护照包裹的情况下)有什么区别,为什么一个起作用而另一个却不起作用。

1 个答案:

答案 0 :(得分:0)

设法解决此问题,这是一个非常简单的问题。

当我声明我的会话选项时:

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

我正在使用cookie: {secure: true},并且由于我正在没有HTTPS的本地环境中工作,因此,一旦我进行身份验证,由于应该生成的Cookie可以仅在HTTPS下工作。

解决方案是将 cookie 选项设置为 false ,然后调用 isAuthenticated()