| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package middleware
- import (
- "app/commons/core"
- "github.com/gin-gonic/gin"
- "net/http"
- "time"
- )
- const AuthorizationHeader = "Authorization"
- // JwtMiddleware JWT中间件, 强制要求用户登录
- func JwtMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- tokenString := c.GetHeader(AuthorizationHeader)
- if tokenString == "" {
- core.Log.Info("未携带token")
- c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseMissAuthToken)
- return
- }
- // 解析JWT
- member, err := ParseJWT(tokenString)
- //core.Log.Infof("member:%+v", member)
- if err != nil || member == nil || member.ExpiresAt.Time.Before(time.Now()) {
- c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseTokenInvalid)
- return
- }
- // token有效,设置用户信息到上下文
- setClaimsToContext(c, member)
- // 继续执行
- c.Next()
- }
- }
- // setClaimsToContext 设置用户信息到上下文
- func setClaimsToContext(c *gin.Context, member *MyClaims) {
- c.Set("userId", member.UserID)
- c.Set("uid", member.Uid)
- c.Set("openId", member.OpenId)
- c.Set("exp", member.ExpiresAt)
- c.Set("issuer", member.Issuer)
- }
- // OptionalJwtMiddleware 允许用户携带 JWT,但不强制要求登录
- func OptionalJwtMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- tokenString := c.GetHeader(AuthorizationHeader)
- if tokenString != "" {
- // 解析JWT
- member, err := ParseJWT(tokenString)
- if err == nil {
- if member != nil {
- setClaimsToContext(c, member)
- }
- }
- //else {
- // core.Log.Infof("OptionalJwtMiddleware:%s", err.Error())
- //}
- }
- c.Next()
- }
- }
|