美文网首页
node 控制用户的session

node 控制用户的session

作者: 谁把月亮涂黑啦 | 来源:发表于2021-11-17 10:18 被阅读0次

    有这样的场景:管理员需要在后台控制用户的某些状态,比如让用户下线,更新某个用户的权限等,但是登录态session往往存储在redis,而session在有效的情况下不会进行更新,所以只能自己修改redis里sessionid的键值,以egg框架为例,操作思路如下:

    登录接口记录用户的sessionid,这是关键:

    // 登录逻辑...
    this.ctx.session.user = {
      user_id: user.user_id,
    }
    // 可以自定义命名
    const saddKey = this.config.name + user.user_id
    // 有效期(ms)
    const maxAge = this.config.session.maxAge
    // 缓存用户的sessionid,externalKey 是 随机生成的key,即redis中的sessionid
    await this.app.redis.sadd(saddKey, this.ctx.session._sessCtx.externalKey)
    // 设置过期时间,ttl 单位为秒
    await this.app.redis.expire(saddKey, maxAge / 1000)
    

    后台让前台用户下线,退出登录状态:

    // 获取这个用户的sessionid
    const sessKey = await this.app.redis.smembers(this.config.name + user_id)
    // 删除用户的session
    await this.app.redis.del(...sessKey)
    

    同样的思路,可以在session中存储用户的权限数据,在后台编辑用户权限,实时更新redis中sessionid的值。


    对于externalKey的解释见:https://github.com/eggjs/egg/issues/2010

    相关文章

      网友评论

          本文标题:node 控制用户的session

          本文链接:https://www.haomeiwen.com/subject/vdghtrtx.html