fix: fix token validation exception handling #901

* fix: fix exception handling

1. add error log for ValidateUserToken
2. update en.json

* chore: update log

---------

Co-authored-by: seven.yu <seven.yu@dji.com>
Co-authored-by: JustSong <songquanpeng@foxmail.com>
This commit is contained in:
Seven Yu 2024-01-07 13:32:39 +08:00 committed by GitHub
parent cbf8f07747
commit 6227eee5bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 31 deletions

View File

@ -86,6 +86,7 @@
"该令牌已过期": "The token has expired", "该令牌已过期": "The token has expired",
"该令牌额度已用尽": "The token quota has been used up", "该令牌额度已用尽": "The token quota has been used up",
"无效的令牌": "Invalid token", "无效的令牌": "Invalid token",
"令牌验证失败": "Token verification failed",
"id 或 userId 为空!": "id or userId is empty!", "id 或 userId 为空!": "id or userId is empty!",
"quota 不能为负数!": "quota cannot be negative!", "quota 不能为负数!": "quota cannot be negative!",
"令牌额度不足": "Insufficient token quota", "令牌额度不足": "Insufficient token quota",

View File

@ -38,39 +38,43 @@ func ValidateUserToken(key string) (token *Token, err error) {
return nil, errors.New("未提供令牌") return nil, errors.New("未提供令牌")
} }
token, err = CacheGetTokenByKey(key) token, err = CacheGetTokenByKey(key)
if err == nil { if err != nil {
if token.Status == common.TokenStatusExhausted { common.SysError("CacheGetTokenByKey failed: " + err.Error())
return nil, errors.New("该令牌额度已用尽") if errors.Is(err, gorm.ErrRecordNotFound) {
} else if token.Status == common.TokenStatusExpired { return nil, errors.New("无效的令牌")
return nil, errors.New("该令牌已过期")
} }
if token.Status != common.TokenStatusEnabled { return nil, errors.New("令牌验证失败")
return nil, errors.New("该令牌状态不可用")
}
if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() {
if !common.RedisEnabled {
token.Status = common.TokenStatusExpired
err := token.SelectUpdate()
if err != nil {
common.SysError("failed to update token status" + err.Error())
}
}
return nil, errors.New("该令牌已过期")
}
if !token.UnlimitedQuota && token.RemainQuota <= 0 {
if !common.RedisEnabled {
// in this case, we can make sure the token is exhausted
token.Status = common.TokenStatusExhausted
err := token.SelectUpdate()
if err != nil {
common.SysError("failed to update token status" + err.Error())
}
}
return nil, errors.New("该令牌额度已用尽")
}
return token, nil
} }
return nil, errors.New("无效的令牌") if token.Status == common.TokenStatusExhausted {
return nil, errors.New("该令牌额度已用尽")
} else if token.Status == common.TokenStatusExpired {
return nil, errors.New("该令牌已过期")
}
if token.Status != common.TokenStatusEnabled {
return nil, errors.New("该令牌状态不可用")
}
if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() {
if !common.RedisEnabled {
token.Status = common.TokenStatusExpired
err := token.SelectUpdate()
if err != nil {
common.SysError("failed to update token status" + err.Error())
}
}
return nil, errors.New("该令牌已过期")
}
if !token.UnlimitedQuota && token.RemainQuota <= 0 {
if !common.RedisEnabled {
// in this case, we can make sure the token is exhausted
token.Status = common.TokenStatusExhausted
err := token.SelectUpdate()
if err != nil {
common.SysError("failed to update token status" + err.Error())
}
}
return nil, errors.New("该令牌额度已用尽")
}
return token, nil
} }
func GetTokenByIds(id int, userId int) (*Token, error) { func GetTokenByIds(id int, userId int) (*Token, error) {