123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package middleware
- import (
- "fmt"
- "github.com/gin-gonic/gin"
- "icloudapp.cn/tools/entity"
- "icloudapp.cn/tools/service"
- "net/http"
- "strings"
- )
- func JWTAuthMiddleware() func(c *gin.Context) {
- return func(ctx *gin.Context) {
-
-
-
-
-
- authHeader := ctx.Request.Header.Get("Authorization")
- cookie, _ := ctx.Cookie("poster_sid")
- if authHeader == "" && cookie != "" {
- authHeader = "Bearer " + cookie
- }
- if authHeader == "" {
- ctx.JSON(http.StatusOK, gin.H{
- "code": entity.CodeAuthIsNull,
- "msg": entity.CodeAuthIsNull.Msg(),
- })
- ctx.Abort()
- return
- }
- parts := strings.SplitN(authHeader, " ", 2)
- if !(len(parts) == 2 && parts[0] == "Bearer") {
- ctx.JSON(http.StatusOK, gin.H{
- "code": entity.CodeInvalidToken,
- "msg": entity.CodeInvalidToken.Msg(),
- })
- ctx.Abort()
- return
- }
- posterClaim, err := service.ParseJWTToken(parts[1])
- if err != nil {
- ctx.JSON(http.StatusOK, gin.H{
- "code": entity.CodeTokenExpired,
- "msg": entity.CodeTokenExpired.Msg(),
- })
- ctx.Abort()
- return
- }
-
- token := service.GetJWTTokenFromRedis(posterClaim.Uid)
- if token == "" || token != parts[1] {
- ctx.JSON(http.StatusOK, gin.H{
- "code": entity.CodeAuthFail,
- "msg": entity.CodeAuthFail.Msg(),
- })
- ctx.Abort()
- return
- }
-
- ctx.Set("jwt_uid", posterClaim.Uid)
- ctx.Set("jwt_username", posterClaim.Username)
-
- ctx.AddParam("jwt_uid", fmt.Sprint(posterClaim.Uid))
- ctx.AddParam("jwt_username", posterClaim.Username)
- ctx.Next()
- }
- }
|