NodeJS:在另一个用户更改权限后强制用户刷新会话
NodeJS: Force user to refresh session after permissions have been changed by another user
在我的 NodeJS 应用程序中,我将 express-session 用于会话,express-mysql-session 将会话存储到 MariaDB,Passport 用于身份验证,Sequelize 用于 ORM。
我现在遇到的问题是我不知道如何刷新其权限已被应用程序管理员更改的用户的会话。
我尝试了 req.logIn()
之类的方法,但这只会刷新正在进行权限更改的管理员的会话。
我的代码如下所示:
editUser = function (req, res) {
var userData.id = req.body.id;
userdata.access = req.body.access;
models.User.update(userData, {where: {id: userData.id}})
.then(function (affectedRows) {
// User has been updated.
// Changes should be active without having the user to log out and log in again
});
);
}
有谁知道如何刷新权限已被其他用户更改的用户的会话?
express-mysql-session
需要一个 table 和几个配置的字段来存储会话信息。
其中一个字段称为 expires
。
如果将该字段设置为 Date.now()
,用户的会话应该已过期。
更新:
阅读您的评论并查看through their code后,我们可以看到数据库中会话行中存储的数据是序列化的JSON。
由于您能够在数据库中识别该用户的会话,您还可以:
- 读取会话数据,
JSON.parse()
它,
- 更新
.roles
数组(您所在的 属性
保留用户的角色),
JSON.stringify()
并将其保存回数据库。
我在以下线程中找到了解决我的问题的方法
我更新了 passport.deserializeUser()
以发出数据库请求并重新加载用户。然后将查询的用户提交给回调。该函数现在看起来像这样:
passport.deserializeUser(function(user, done) {
models.User.findOne({where: {id: user.id}})
.then(function(updatedUser) {
done(null, updatedUser);
}, function(err) {
console.error(err);
done(null, user);
});
});
在我的 NodeJS 应用程序中,我将 express-session 用于会话,express-mysql-session 将会话存储到 MariaDB,Passport 用于身份验证,Sequelize 用于 ORM。
我现在遇到的问题是我不知道如何刷新其权限已被应用程序管理员更改的用户的会话。
我尝试了 req.logIn()
之类的方法,但这只会刷新正在进行权限更改的管理员的会话。
我的代码如下所示:
editUser = function (req, res) {
var userData.id = req.body.id;
userdata.access = req.body.access;
models.User.update(userData, {where: {id: userData.id}})
.then(function (affectedRows) {
// User has been updated.
// Changes should be active without having the user to log out and log in again
});
);
}
有谁知道如何刷新权限已被其他用户更改的用户的会话?
express-mysql-session
需要一个 table 和几个配置的字段来存储会话信息。
其中一个字段称为 expires
。
如果将该字段设置为 Date.now()
,用户的会话应该已过期。
更新:
阅读您的评论并查看through their code后,我们可以看到数据库中会话行中存储的数据是序列化的JSON。
由于您能够在数据库中识别该用户的会话,您还可以:
- 读取会话数据,
JSON.parse()
它,- 更新
.roles
数组(您所在的 属性 保留用户的角色), JSON.stringify()
并将其保存回数据库。
我在以下线程中找到了解决我的问题的方法
我更新了 passport.deserializeUser()
以发出数据库请求并重新加载用户。然后将查询的用户提交给回调。该函数现在看起来像这样:
passport.deserializeUser(function(user, done) {
models.User.findOne({where: {id: user.id}})
.then(function(updatedUser) {
done(null, updatedUser);
}, function(err) {
console.error(err);
done(null, user);
});
});