跳到主要内容
版本:2.8.x(Latest)

在本章节中,我们使用GoFrame完成了用户的会话管理,提供了登录获取用户信息两大功能,加深了GoFrame的理解,并学会了以下内容:

  • 声明用户结构体,生成Token
  • Token解析出用户信息,提供获取用户信息接口;
  • 中间件的基础使用,使用中间件完成用户权限认证;
  • 分组路由注册中间件。

关于退出登录


为什么我们没有开发退出登录功能呢?这是因为JWT本质上是一个无状态的令牌,一旦签发,服务器不会存储它。这导致了在使用 JWT 时,退出登录不能像传统会话那样简单地在服务器端销毁会话。解决JWT退出登录的方案大致有两种,它们各有优劣:

  1. 黑名单机制
    • 当用户登出或 JWT 被撤销时,将该令牌添加到黑名单数据库中;
    • 每次请求时,从请求头中提取 JWT,并检查它是否在黑名单中;
    • 如果令牌在黑名单中,则拒绝请求;
    • 其优势在于易于实现和维护,适用于大多数情况下;劣势在于需要存储所有被撤销的令牌,可能会导致存储空间增加。
  2. 白名单机制
    • 在用户登录时,将生成的 JWT 添加到白名单数据库中;
    • 每次请求时,从请求头中提取 JWT,并检查它是否在白名单中;
    • 如果令牌不在白名单中,则拒绝请求。
    • 其优势在于更高的安全性,只有白名单中的令牌才能被接受,确保了更严格的访问控制。劣势在于复杂性增加,需要在用户登录时将令牌添加到白名单,并在合适的时候移除。

黑白名单数据一般会储存在非关系型数据库中,例如Redis