🆕新增tui管理模式[能用就行]
This commit is contained in:
@@ -36,7 +36,7 @@ func JWT() JwtComponent {
|
||||
// @return token
|
||||
// @return expireTime
|
||||
// @return err
|
||||
func (JwtComponent) GenerateToken(userId, secret string, times ...time.Time) (token string, expireTime *jwt.NumericDate, err error) {
|
||||
func (JwtComponent) GenerateToken(userId, secret, source string, times ...time.Time) (token string, expireTime *jwt.NumericDate, err error) {
|
||||
var notBefore, issuedAt *jwt.NumericDate
|
||||
if len(times) != 0 {
|
||||
expireTime = jwt.NewNumericDate(times[0])
|
||||
@@ -68,10 +68,19 @@ func (JwtComponent) GenerateToken(userId, secret string, times ...time.Time) (to
|
||||
return "", nil, errors.New("生成token失败")
|
||||
}
|
||||
|
||||
client.Redis.Set(context.Background(),
|
||||
fmt.Sprintf("%s:%s", constant.UserToken, userId),
|
||||
token,
|
||||
time.Duration(expireTime.Sub(time.Now()).Abs().Seconds())*time.Second)
|
||||
switch source {
|
||||
case "http":
|
||||
client.Redis.Set(context.Background(),
|
||||
fmt.Sprintf("%s:%s", constant.UserToken, userId),
|
||||
token,
|
||||
time.Duration(expireTime.Sub(time.Now()).Abs().Seconds())*time.Second)
|
||||
case "tui":
|
||||
client.Redis.Set(context.Background(),
|
||||
fmt.Sprintf("%s:%s", constant.TUIUserToken, userId),
|
||||
token,
|
||||
time.Duration(expireTime.Sub(time.Now()).Abs().Seconds())*time.Second)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -81,7 +90,7 @@ func (JwtComponent) GenerateToken(userId, secret string, times ...time.Time) (to
|
||||
// @param token
|
||||
// @return *JwtComponent
|
||||
// @return error
|
||||
func (JwtComponent) ParseToken(token, secret string) (*JwtComponent, error) {
|
||||
func (JwtComponent) ParseToken(token, secret, source string) (*JwtComponent, error) {
|
||||
tokenStr := strings.Split(token, "Bearer ")[1]
|
||||
|
||||
t, err := jwt.ParseWithClaims(tokenStr, &JwtComponent{}, func(token *jwt.Token) (any, error) {
|
||||
@@ -89,10 +98,20 @@ func (JwtComponent) ParseToken(token, secret string) (*JwtComponent, error) {
|
||||
})
|
||||
|
||||
if claims, ok := t.Claims.(*JwtComponent); ok && t.Valid {
|
||||
userToken, err := client.Redis.Get(context.Background(), fmt.Sprintf("%s:%s", constant.UserToken, claims.ID)).Result()
|
||||
if err != nil {
|
||||
log.Errorf("缓存中用户[%s]的token查找失败: %v", claims.ID, err.Error())
|
||||
return nil, errors.New("token不存在")
|
||||
var userToken string
|
||||
switch source {
|
||||
case "http":
|
||||
userToken, err = client.Redis.Get(context.Background(), fmt.Sprintf("%s:%s", constant.UserToken, claims.ID)).Result()
|
||||
if err != nil {
|
||||
log.Errorf("缓存中用户[%s]的token查找失败: %v", claims.ID, err.Error())
|
||||
return nil, errors.New("token不存在")
|
||||
}
|
||||
case "tui":
|
||||
userToken, err = client.Redis.Get(context.Background(), fmt.Sprintf("%s:%s", constant.TUIUserToken, claims.ID)).Result()
|
||||
if err != nil {
|
||||
log.Errorf("缓存中用户[%s]的token查找失败: %v", claims.ID, err.Error())
|
||||
return nil, errors.New("token不存在")
|
||||
}
|
||||
}
|
||||
|
||||
if userToken != tokenStr {
|
||||
|
Reference in New Issue
Block a user