说明

全局登录检查是在路由中间件中实现的。基于 jwt 头部 token 进行解码 与 数据库进行 校验比对。

可 配置 排除具体哪些url不进行登录检查

开启

/app/routers.go 总路由文件中
image.png

取消注释 即可 开启全局登录检查

使用

登录检查 需要 解码 头部 token 参数 。

所以 自己项目中 需要 根据业务情况 在登录成功时 生成 token 给到前端,前端下次请求带上token头部

生成token

生成token使用的是jwt组件实现的

代码文件 /app/extend/self_jwt/jwt.go

  1. type TokenStruct struct {
  2. userId int64 `json:"user_id"`
  3. updateTime int64 `json:"update_time"`
  4. jwt.StandardClaims
  5. }
  6. //CreateToken 生成token的函数 一般用于业务登录时生产token给到前端
  7. //@param id int64 用户ID参与生成 token,DecodeToken 函数解密出 id
  8. func CreateToken(id int64) (string, error) {
  9. tokenData := TokenStruct{
  10. id,
  11. time.Now().Unix(),
  12. jwt.StandardClaims{
  13. ExpiresAt: time.Now().Add(time.Hour * 3).Unix(), //token过期时间,不过期设置为0
  14. Issuer: "gin-api",
  15. },
  16. }
  17. //
  18. tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, tokenData)
  19. token, err := tokenClaims.SignedString(jwtSecret)
  20. return token, err
  21. }

CreateToken 函数可生成 token, 该函数接受 一个id int 参数。业务中 一般是 user表主键ID

自己的项目中需要在登录接口 登录成功后 调用生成CreateToken函数 生成 token 返回前端

token检查

中间件中会检查 解码 token 。根据 token 获取用户信息。

获取登录信息

解码token后获取用户信息,需要根据项目情况,自己实现

/app/extend/check_token中间件中 有两个函数,需要实现

  1. //GetLoginUserInfo 获取登录用户信息
  2. func GetLoginUserInfo(ctx *gin.Context) LoginUserInfo {
  3. if v,ok := ctx.Get("user_info");ok {
  4. return v.(LoginUserInfo)
  5. }
  6. return LoginUserInfo{}
  7. }
  8. //SetLoginUserInfo 设置登录用户信息
  9. func SetLoginUserInfo(ctx *gin.Context, userId int) {
  10. //查询数据库
  11. //查询到的信息保持到 ctx 中
  12. ctx.Set("user_info", LoginUserInfo{})
  13. }

SetLoginUserInfo 函数 根据 解码出来的 userId 实现查询用户信息逻辑,并把用户信息保存到 上下文中。

GetLoginUserInfo 函数 从上下文中 获取用户信息。在需要获取信息的地方调用该函数