早上好!我需要帮助。我是 Nodejs、Expressjs 和 Mongo 的新手。我正在使用护照和本地护照来处理身份验证。我设法创建了一个帐户并登录。问题是,当我登录但不浏览我的博客时,我会在一段时间后(大约 2 分钟)失去会话。当我登录并浏览链接时,我设法保持会话。我还想提醒一下,当我尝试注销时,req.logout 不起作用。
我练习创建一个博客,我可以在其中展示我的文章、修改它们并添加其他文章。为了让它更顺畅,我决定添加身份验证。我设法创建了一个用户并毫无问题地登录。我面临的第一个问题是断开连接;当我做
router.get("/logout", (req, res) => { req.logout(); req.flash("message", "You are offline"); res. render("index");`` });
我找不到任何错误,只有 404 错误。 我放弃了,因为我找不到解决办法。 第二个问题是我在短时间内丢失了登录用户的会话,当时我希望他们保持登录状态直到 他断开连接。
您在短时间后失去会话的原因可能有多种。一种可能是您的会话 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('/');
});
希望对您有所帮助!