javascript - Express-sessions 不在不同路由上保存会话数据
问题描述
我正在使用 Express 和 Express-sessions 来保存当前用户的 ID。登录时,在会话中设置了用户ID,但是,如果我要切换到另一个页面,则发现用户ID设置为未定义。为什么是这样?
下面是API。每当加载页面以检查用户是否已登录时,都会运行 auth 路由。
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const session = require('express-session');
const user = require('../components/user');
let sess;
router.post('/createUser', (req, res) => {
user
.createUser({
username: req.body.username,
password: req.body.password,
email: req.body.email
})
.then(() => res.sendStatus(200))
});
router.post('/login', (req, res) => {
sess = req.session;
user
.authenticate({
username: req.body.username,
password: req.body.password
})
.then(({ success, user }) => {
if (success) {res.sendStatus(200); sess.userID = user;}
else res.sendStatus(401)
})
});
router.post('/auth', (req, res) => {
sess = req.session;
if (sess.userID === undefined){
res.redirect('/');
}else{
res.sendStatus(200);
}
});
router.post('/auth/logout', (req, res) => {
sess = req.session;
sess.userID = undefined;
res.redirect('/');
});
router.post('/auth/createCheck', (req, res) => {
sess = req.session;
console.log(sess.userID);
if (!sess.userID === undefined){
res.redirect('/');
}else{
res.sendStatus(200);
}
});
module.exports = router;
解决方案
原来这是因为我在每条路由上都定义了 sess,因为它应该只在登录路由中定义。
推荐阅读
- flutter - Flutter - 在套接字连接中的有状态小部件之间传递数据
- python - 如何将类的方法返回的值作为PyTest中测试用例的参数传递?
- graphql - Apollo 客户端 - 在终止链接上调用 concat,这将不起作用
- swift - 从firebase获取数据而不调用自己的数据
- c# - .NET foreach 循环问题,以便将结果导出到 Excel 文件
- python - 如何将异常与 pybind11 中的自定义字段和构造函数绑定,并且仍然让它们作为 python 异常起作用?
- javascript - 导航上出现空白 - SafeView
- jquery - 我的 jquery 代码在承诺方面有什么问题
- python - 获取原始 sys.argv
- python - Keras:生成器在开始第二个时期时用完了数据