fix: 修复claude token刷新失效的问题
This commit is contained in:
@@ -43,18 +43,23 @@ func (r *ClaudeTokenRefresher) CanRefresh(account *Account) bool {
|
||||
// NeedsRefresh 检查token是否需要刷新
|
||||
// 基于 expires_at 字段判断是否在刷新窗口内
|
||||
func (r *ClaudeTokenRefresher) NeedsRefresh(account *Account, refreshWindow time.Duration) bool {
|
||||
expiresAtStr := account.GetCredential("expires_at")
|
||||
if expiresAtStr == "" {
|
||||
var expiresAt int64
|
||||
|
||||
// 方式1: 通过 GetCredential 获取(处理字符串和部分数字类型)
|
||||
if s := account.GetCredential("expires_at"); s != "" {
|
||||
v, err := strconv.ParseInt(s, 10, 64)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
expiresAt = v
|
||||
} else if v, ok := account.Credentials["expires_at"].(float64); ok {
|
||||
// 方式2: 直接获取 float64(处理某些 JSON 解码器将数字解析为 float64 的情况)
|
||||
expiresAt = int64(v)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
|
||||
expiresAt, err := strconv.ParseInt(expiresAtStr, 10, 64)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
expiryTime := time.Unix(expiresAt, 0)
|
||||
return time.Until(expiryTime) < refreshWindow
|
||||
return time.Until(time.Unix(expiresAt, 0)) < refreshWindow
|
||||
}
|
||||
|
||||
// Refresh 执行token刷新
|
||||
|
||||
Reference in New Issue
Block a user