mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
fix(oauth): 修复 OAuth 刷新后 Token 有效期不更新问题 (#324)
- 持久化刷新后的 `expires_at` 到 Provider Key SQL 更新链路 - 手动刷新接口优先返回本次刷新得到的过期时间 - 按当前 Key 字段重建 OAuth 状态快照,避免旧快照覆盖 - 前端刷新后防止旧列表数据回退覆盖新有效期
This commit is contained in:
@@ -1703,19 +1703,28 @@ async function handleRefreshOAuth(key: EndpointAPIKey) {
|
||||
refreshingOAuthKeyId.value = key.id
|
||||
try {
|
||||
const result = await refreshProviderOAuth(key.id)
|
||||
const refreshedExpiresAt = typeof result.expires_at === 'number' ? result.expires_at : null
|
||||
let refreshedKey: EndpointAPIKey | null = null
|
||||
// 更新本地数据
|
||||
const keyInList = providerKeys.value.find(k => k.id === key.id)
|
||||
if (keyInList) {
|
||||
keyInList.oauth_expires_at = result.expires_at
|
||||
keyInList.oauth_expires_at = refreshedExpiresAt
|
||||
}
|
||||
// 只重新加载 keys 数据,避免整个表格刷新
|
||||
if (props.providerId) {
|
||||
const freshKeys = await getProviderKeys(props.providerId).catch(() => null)
|
||||
if (freshKeys) {
|
||||
providerKeys.value = freshKeys
|
||||
syncCurrentSelections(endpoints.value, freshKeys)
|
||||
refreshedKey = freshKeys.find(item => item.id === key.id) ?? null
|
||||
const mergedKeys = freshKeys.map((item) => {
|
||||
if (item.id !== key.id) return item
|
||||
if (refreshedExpiresAt == null) return item
|
||||
if (typeof item.oauth_expires_at === 'number' && item.oauth_expires_at >= refreshedExpiresAt) {
|
||||
return item
|
||||
}
|
||||
return { ...item, oauth_expires_at: refreshedExpiresAt }
|
||||
})
|
||||
providerKeys.value = mergedKeys
|
||||
syncCurrentSelections(endpoints.value, mergedKeys)
|
||||
refreshedKey = mergedKeys.find(item => item.id === key.id) ?? null
|
||||
}
|
||||
}
|
||||
const feedback = getOAuthRefreshFeedback({
|
||||
|
||||
@@ -2180,11 +2180,22 @@ async function handleRefreshOAuth(key: PoolKeyDetail) {
|
||||
refreshingOAuthKeyId.value = key.key_id
|
||||
try {
|
||||
const result = await refreshProviderOAuth(key.key_id)
|
||||
const refreshedExpiresAt = typeof result.expires_at === 'number' ? result.expires_at : null
|
||||
const target = keyPage.value.keys.find(k => k.key_id === key.key_id)
|
||||
if (target) {
|
||||
target.oauth_expires_at = result.expires_at ?? null
|
||||
target.oauth_expires_at = refreshedExpiresAt
|
||||
}
|
||||
await loadKeys()
|
||||
if (refreshedExpiresAt != null) {
|
||||
const reloadedTarget = keyPage.value.keys.find(k => k.key_id === key.key_id)
|
||||
if (
|
||||
reloadedTarget
|
||||
&& (typeof reloadedTarget.oauth_expires_at !== 'number'
|
||||
|| reloadedTarget.oauth_expires_at < refreshedExpiresAt)
|
||||
) {
|
||||
reloadedTarget.oauth_expires_at = refreshedExpiresAt
|
||||
}
|
||||
}
|
||||
const refreshedKey = keyPage.value.keys.find(k => k.key_id === key.key_id) ?? null
|
||||
const feedback = getOAuthRefreshFeedback({
|
||||
accountStateRecheckAttempted: result.account_state_recheck_attempted,
|
||||
|
||||
Reference in New Issue
Block a user