会话在短时间后丢失

问题描述 投票:0回答:1

早上好!我需要帮助。我是 Nodejs、Expressjs 和 Mongo 的新手。我正在使用护照和本地护照来处理身份验证。我设法创建了一个帐户并登录。问题是,当我登录但不浏览我的博客时,我会在一段时间后(大约 2 分钟)失去会话。当我登录并浏览链接时,我设法保持会话。我还想提醒一下,当我尝试注销时,req.logout 不起作用。

我练习创建一个博客,我可以在其中展示我的文章、修改它们并添加其他文章。为了让它更顺畅,我决定添加身份验证。我设法创建了一个用户并毫无问题地登录。我面临的第一个问题是断开连接;当我做

router.get("/logout", (req, res) => { req.logout(); req.flash("message", "You are offline"); res. render("index");`` });

我找不到任何错误,只有 404 错误。 我放弃了,因为我找不到解决办法。 第二个问题是我在短时间内丢失了登录用户的会话,当时我希望他们保持登录状态直到 他断开连接。

passport.js session-cookies logout passport-local
1个回答
0
投票

您在短时间后失去会话的原因可能有多种。一种可能是您的会话 cookie 过期太快。默认情况下,Passport 和 Express 创建的会话 cookie 的生命周期只有一个浏览器会话,这意味着当用户关闭浏览器时,cookie 将被删除。您可以在配置会话中间件时使用

maxAge
选项将会话 cookie 的生命周期设置为更长的时间。例如:

app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
  cookie: { maxAge: 3600000 } // 1 hour
}));

此代码将会话 cookie 的生命周期设置为一小时(3600000 毫秒)。

另一种可能是您的服务器正在重启或您的应用程序正在崩溃,这将导致您的会话丢失。确保您的服务器持续运行并且您的应用程序没有崩溃。

关于

req.logout()
不工作的问题,没有更多信息很难说。一种可能是您没有正确使用 Passport 的
initialize()
session()
中间件。确保您在中间件链中以正确的顺序调用
passport.initialize()
passport.session()
,并且将
req
res
对象传递给
passport.session()
。例如:

app.use(passport.initialize());
app.use(passport.session());

如果您仍然无法使用

req.logout()
,您可以尝试手动删除
req.user
属性和
req.session.passport
属性,如下所示:

router.get('/logout', (req, res) => {
  req.user = null;
  req.session.passport = null;
  req.logout();
  req.flash('message', 'You are offline');
  res.redirect('/');
});

希望对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.