node.js - 如何使用 express-session 为普通用户和管理员用户创建两个不同的会话?
问题描述
在我的应用程序中,有两种类型的用户登录:普通用户和管理员用户。现在,我对两种类型的用户都使用单个会话,并且我的应用程序表现异常。当两个或更多用户登录时,一段时间后某些用户会意外注销。
我认为这个问题是由于单个会话而发生的,我试图分成两个不同的会话,
//manage session for normal user
app.use('/', session({
key: USER_SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESSION_SECRET,
cookie: {
expires: 600000
}
}));
//manage session for admin
app.use('/admin', session({
key: ADMIN_SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESSION_SECRET,
cookie: {
expires: 600000
}
}));
此外,普通用户的所有路由都以“/”开头,而管理员的所有路由都以“/admin”开头,所以我如上所述拆分会话。
我不知道创建两个不同的会话是否是正确的方法。此外,管理员会话也没有按预期工作。当我以普通用户身份注销时,我也会从管理员注销。处理这些会话的最佳方式是什么?注销时我们需要做什么?
解决方案
对所有用户类型使用单个会话。最好的方法是在会话中使用帐户类型来分隔用户。
每当用户注册时,为普通用户和管理员用户设置值。在您的会话密码中包含帐户类型。
格式应如下所示:
secret: YOUR_SECRET.usertype
这样您就可以用点拆分它并确定用户类型。这样,您将拥有一个带有用户类型的会话。
推荐阅读
- angular - 角度日期管道考虑到时区
- jquery - 无法通过 FTP 更新 wordpress wp-content 文件
- python - RuntimeError: 标量类型 Long 的预期对象,但参数 #2 'target' 的标量类型 Float
- java - RSA 公钥到 base64 字符串
- javascript - 如何获得 lat,long 的所需值以使用 Leaflet.js 仅显示地图的所需部分?
- python - 如何在不知道哪些行的情况下在多列中选择具有 NaN 的行?
- r - R(spml)中的空间面板模型:平衡空间面板数据的错误
- actions-on-google - 谷歌不断在自定义语音和谷歌默认语音之间切换
- r - 我该如何处理“IRdisplay 只能从 IPython R 内核和 R 魔法中使用”?
- awk - 使用 awk 在 linux 中分隔列