New file |
| | |
| | | package middleware |
| | | |
| | | import ( |
| | | "github.com/gin-gonic/gin" |
| | | "srm/pkg/contextx" |
| | | "srm/pkg/ecode" |
| | | "strings" |
| | | ) |
| | | |
| | | func JWTAuth() gin.HandlerFunc { |
| | | return func(c *gin.Context) { |
| | | ctx := new(contextx.Context).SetCtx(c) |
| | | // 我们这里jwt鉴权取头部信息 Authorization 登录时回返回token信息 这里前端需要把token存储到cookie或者本地localStorage中 不过需要跟后端协商过期时间 可以约定刷新令牌或者重新登录 |
| | | token := c.Request.Header.Get("Authorization") |
| | | if token == "" { |
| | | ctx.Fail(ecode.JWTEmpty) |
| | | c.Abort() |
| | | return |
| | | } |
| | | slices := strings.Split(token, " ") |
| | | if len(slices) == 2 { |
| | | token = slices[1] |
| | | } |
| | | j := NewJWT() |
| | | // parseToken 解析token包含的信息 |
| | | claims, err := j.ParseToken(token) |
| | | if err != nil { |
| | | if err == TokenExpired { |
| | | c.Next() |
| | | return |
| | | } |
| | | c.Next() |
| | | return |
| | | } |
| | | |
| | | c.Set("claims", claims) |
| | | c.Next() |
| | | } |
| | | } |