在本章节中,我们使用GoFrame
完成了用户的会话管理,提供了登录和获取用户信息两大功能,加深了GoFrame
的理解,并学会了以下内容:
- 声明用户结构体,生成
Token
; Token
解析出用户信息,提供获取用户信息接口;- 中间件的基础使用,使用中间件完成用户权限认证;
- 分组路由注册中间件。
关于退出登录
为什么我们没有开发退出登录功能呢?这是因为JWT
本质上是一个无状态的令牌,一旦签发,服务器不会存储它。这导致了在使用 JWT
时,退出登录不能像传统会话那样简单地在服务器端销毁会话。解决JWT
退出登录的方案大致有两种,它们各有优劣:
- 黑名单机制:
- 当用户登出或
JWT
被撤销时,将该令牌添加到黑名单数据库中; - 每次请求时,从请求头中提取
JWT
,并检查它是否在黑名单中; - 如果令牌在黑名单中,则拒绝请求;
- 其优势在于易于实现和维护,适用于大多数情况下;劣势在于需要存储所有被撤销的令牌,可能会导致存储空间增加。
- 当用户登出或
- 白名单机制:
- 在用户登录时,将生成的
JWT
添加到白名单数据库中; - 每次请求时,从请求头中提取
JWT
,并检查它是否在白名单中; - 如果令牌不在白名单中,则拒绝请求。
- 其优势在于更高的安全性,只有白名单中的令牌才能被接受,确保了更严格的访问控制。劣势在于复杂性增加,需要在用户登录时将令牌添加到白名单,并在合适的时候移除。
- 在用户登录时,将生成的
黑白名单数据一般会储存在非关系型数据库中,例如Redis
。