123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package middleware
- import (
- "encoding/base64"
- "gadmin/config"
- "gadmin/utility/serializer"
- "gadmin/utility/token"
- "github.com/gin-gonic/gin"
- jsoniter "github.com/json-iterator/go"
- "github.com/sirupsen/logrus"
- "strconv"
- "time"
- )
- // 路由白名单
- var whitelist = []string{
- "/api/gm/userRoles",
- }
- // Token 验证token
- func Token() gin.HandlerFunc {
- return func(c *gin.Context) {
- if isWhite(c.Request.URL.Path) {
- c.Next()
- return
- }
- encodeToken := token.GetAuthorization(c)
- if encodeToken == "" {
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- bytesT, err := base64.URLEncoding.DecodeString(encodeToken)
- if err != nil {
- logrus.Warningf("middleware base64.URLEncoding.DecodeString:%+v", err.Error())
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- t := string(bytesT)
- tokenKey := config.GetTokenKey(t)
- if config.TokenRedis.Exists(tokenKey).Val() == 0 {
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- userStr := config.TokenRedis.Get(tokenKey).Val()
- user := new(token.UserClaims)
- if err := jsoniter.UnmarshalFromString(userStr, user); err != nil {
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- if user.ID == 0 {
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- // 查询登录token是否有效
- key := config.GetUserTokenKey(user.ID)
- tokenCTStr := config.TokenRedis.HGet(key, t).Val()
- tokenCreateTime, err := strconv.Atoi(tokenCTStr)
- if err != nil {
- logrus.Warningf("middleware config.LogRedis.HGet:%+v", err.Error())
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- tokenCT := time.Unix(int64(tokenCreateTime), 0)
- if tokenCT.Before(time.Now().Add(-config.TokenExpireTime)) {
- c.JSON(200, serializer.CheckLogin())
- c.Abort()
- return
- }
- config.TokenRedis.HSet(key, t, time.Now().Unix())
- config.TokenRedis.Expire(key, config.TokenExpireTime)
- config.TokenRedis.Expire(tokenKey, config.TokenExpireTime)
- //if os.Getenv("GIN_MODE") == "release" && claims.UserName == "mojun" {
- // c.JSON(200, serializer.CheckLogin())
- // c.Abort()
- // return
- //}
- c.Set("user", user)
- c.Set("admin_role_id", user.RoleId)
- c.Next()
- return
- }
- }
- func isWhite(path string) bool {
- for _, v := range whitelist {
- if path == v {
- return true
- }
- }
- return false
- }
|