1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package middleware
- import (
- "go-nc/configs/global"
- routes "go-nc/internal/router"
- "go-nc/internal/utils"
- "go-nc/model"
- "github.com/gin-gonic/gin"
- )
- var TokenExpired = 886
- // JwtAuth 中间件
- func JwtAuth() gin.HandlerFunc {
- return func(c *gin.Context) {
- // 白名单
- if utils.Contains(routes.NoAuthApi, c.Request.URL.Path) {
- c.Next()
- return
- }
- // 获取token
- auth := c.Request.Header.Get("Authorization")
- if len(auth) == 0 {
- // 无token直接拒绝
- c.Abort()
- ErrorResponse(c, TokenExpired, "token无效")
- return
- }
- // 校验token
- claims, err := utils.ParseToken(auth)
- if err != nil {
- // if strings.Contains(err.Error(), "expired") {
- // // 若过期,调用续签函数
- // newToken, _ := utils.RenewToken(claims)
- // if newToken != "" {
- // // 续签成功給返回头设置一个newtoken字段
- // c.Header("newtoken", newToken)
- // c.Request.Header.Set("Authorization", newToken)
- // c.Next()
- // return
- // }
- // }
- // Token验证失败或续签失败直接拒绝请求
- c.Abort()
- ErrorResponse(c, TokenExpired, "token无效!")
- return
- }
- // 查询数据库,验证用户信息
- var userInfo model.Sys_user
- global.App.DB.Where("id= ? AND username = ?", claims.User.Id, claims.User.UserName).First(&userInfo)
- userInfo.Password = ""
- // 用户不存在
- if userInfo.Id == 0 {
- // 用户不存在直接拒绝
- c.Abort() // 终止请求
- ErrorResponse(c, TokenExpired, "token无效!")
- return
- }
- // 状态不正常直接拒绝
- if userInfo.State != "1" {
- c.Abort() // 终止请求
- ErrorResponse(c, TokenExpired, "账号已被锁定,请联系管理员!")
- return
- }
- // 用户存在继续执行
- c.Set("userInfo", userInfo)
- // token未过期继续执行1其他中间件
- c.Next()
- }
- }
|