diff --git a/middleware/token_auth.go b/middleware/token_auth.go new file mode 100644 index 0000000..9ce04b5 --- /dev/null +++ b/middleware/token_auth.go @@ -0,0 +1,45 @@ +package middleware + +import ( + "context" + grpcClient "go-desk-service/grpc-client" + "go-desk-service/libs" + userpb "go-desk-service/proto/gen" + "net/http" + "time" + + "github.com/gin-gonic/gin" +) + +func TokenAuth() gin.HandlerFunc { + return func(c *gin.Context) { + // 调用当前grpc的token校验接口 + client := grpcClient.GetUserClient() + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + tokenExpired := libs.ErrorCode["TokenExpired"] + c.JSON(http.StatusUnauthorized, gin.H{"code": tokenExpired.Code, "data": tokenExpired.Data, "msg": tokenExpired.Msg}) + c.Abort() + return + } + TokenStatus, err := client.ValidateToken(ctx, &userpb.ValidateTokenRequest{ + AccessToken: authHeader, + }) + if err != nil { + tokenExpired := libs.ErrorCode["TokenExpired"] + c.JSON(http.StatusUnauthorized, gin.H{"code": tokenExpired.Code, "data": tokenExpired.Data, "msg": tokenExpired.Msg}) + c.Abort() + return + } + if !TokenStatus.IsValid { + tokenExpired := libs.ErrorCode["TokenExpired"] + c.JSON(http.StatusUnauthorized, gin.H{"code": tokenExpired.Code, "data": tokenExpired.Data, "msg": tokenExpired.Msg}) + c.Abort() + return + } + c.Set("userID", TokenStatus.UserId) + c.Next() + } +}