说明
全局登录检查是在路由中间件中实现的。基于 jwt 头部 token 进行解码 与 数据库进行 校验比对。
开启
/app/routers.go 总路由文件中
取消注释 即可 开启全局登录检查
使用
登录检查 需要 解码 头部 token 参数 。
所以 自己项目中 需要 根据业务情况 在登录成功时 生成 token 给到前端,前端下次请求带上token头部
生成token
生成token使用的是jwt组件实现的
代码文件 /app/extend/self_jwt/jwt.go
type TokenStruct struct {userId int64 `json:"user_id"`updateTime int64 `json:"update_time"`jwt.StandardClaims}//CreateToken 生成token的函数 一般用于业务登录时生产token给到前端//@param id int64 用户ID参与生成 token,DecodeToken 函数解密出 idfunc CreateToken(id int64) (string, error) {tokenData := TokenStruct{id,time.Now().Unix(),jwt.StandardClaims{ExpiresAt: time.Now().Add(time.Hour * 3).Unix(), //token过期时间,不过期设置为0Issuer: "gin-api",},}//tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, tokenData)token, err := tokenClaims.SignedString(jwtSecret)return token, err}
CreateToken 函数可生成 token, 该函数接受 一个id int 参数。业务中 一般是 user表主键ID
自己的项目中需要在登录接口 登录成功后 调用生成CreateToken函数 生成 token 返回前端
token检查
中间件中会检查 解码 token 。根据 token 获取用户信息。
获取登录信息
解码token后获取用户信息,需要根据项目情况,自己实现
/app/extend/check_token中间件中 有两个函数,需要实现
//GetLoginUserInfo 获取登录用户信息func GetLoginUserInfo(ctx *gin.Context) LoginUserInfo {if v,ok := ctx.Get("user_info");ok {return v.(LoginUserInfo)}return LoginUserInfo{}}//SetLoginUserInfo 设置登录用户信息func SetLoginUserInfo(ctx *gin.Context, userId int) {//查询数据库//查询到的信息保持到 ctx 中ctx.Set("user_info", LoginUserInfo{})}
SetLoginUserInfo 函数 根据 解码出来的 userId 实现查询用户信息逻辑,并把用户信息保存到 上下文中。
GetLoginUserInfo 函数 从上下文中 获取用户信息。在需要获取信息的地方调用该函数
