🎨 优化鉴权中间件
This commit is contained in:
@@ -3,9 +3,11 @@ package middleware
|
||||
import (
|
||||
"errors"
|
||||
"git.echol.cn/loser/lckt/global"
|
||||
"git.echol.cn/loser/lckt/model/user"
|
||||
"git.echol.cn/loser/lckt/utils"
|
||||
"git.echol.cn/loser/lckt/utils/user_jwt"
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
@@ -23,7 +25,7 @@ func UserJWTAuth() gin.HandlerFunc {
|
||||
return
|
||||
}
|
||||
|
||||
j := utils.NewJWT()
|
||||
j := user_jwt.NewUserJWT()
|
||||
// parseToken 解析token包含的信息
|
||||
claims, err := j.ParseToken(token)
|
||||
if err != nil {
|
||||
@@ -39,6 +41,23 @@ func UserJWTAuth() gin.HandlerFunc {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询用户是否被禁用
|
||||
status := 1
|
||||
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", claims.BaseClaims.ID).Select("status").Scan(&status).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("中间件查询用户状态失败", zap.Error(err))
|
||||
response.FailWithMessage(err.Error(), c)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
if status == 0 {
|
||||
response.Banned("用户已被禁用", c)
|
||||
user_jwt.ClearToken(c)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
c.Set("claims", claims)
|
||||
if claims.ExpiresAt.Unix()-time.Now().Unix() < claims.BufferTime {
|
||||
dr, _ := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
|
||||
@@ -50,7 +69,7 @@ func UserJWTAuth() gin.HandlerFunc {
|
||||
user_jwt.SetToken(c, newToken, int(dr.Seconds()))
|
||||
if global.GVA_CONFIG.System.UseMultipoint {
|
||||
// 记录新的活跃jwt
|
||||
_ = utils.SetRedisJWT(newToken, newClaims.Username)
|
||||
_ = utils.SetRedisJWT(newToken, newClaims.NickName)
|
||||
}
|
||||
}
|
||||
c.Next()
|
||||
|
||||
Reference in New Issue
Block a user