fix: 修复tokenExpiresAt混淆问题

This commit is contained in:
shaw
2025-10-14 19:19:33 +08:00
parent 6c60478777
commit 62aea5a4a8
3 changed files with 42 additions and 9 deletions

View File

@@ -32,6 +32,18 @@ const ProxyHelper = require('../utils/proxyHelper')
const router = express.Router()
// 🛠️ 工具函数:处理可为空的时间字段
function normalizeNullableDate(value) {
if (value === undefined || value === null) {
return null
}
if (typeof value === 'string') {
const trimmed = value.trim()
return trimmed === '' ? null : trimmed
}
return value
}
// 🛠️ 工具函数:映射前端字段名到后端字段名
/**
* 映射前端的 expiresAt 字段到后端的 subscriptionExpiresAt 字段
@@ -64,17 +76,22 @@ function formatAccountExpiry(account) {
return account
}
// 保存原始的 OAuth token 过期时间
const tokenExpiresAt = account.expiresAt || null
const rawSubscription = Object.prototype.hasOwnProperty.call(account, 'subscriptionExpiresAt')
? account.subscriptionExpiresAt
: null
// 将订阅过期时间映射到 expiresAt(前端使用)
const subscriptionExpiresAt = account.subscriptionExpiresAt || null
const rawToken = Object.prototype.hasOwnProperty.call(account, 'tokenExpiresAt')
? account.tokenExpiresAt
: account.expiresAt
const subscriptionExpiresAt = normalizeNullableDate(rawSubscription)
const tokenExpiresAt = normalizeNullableDate(rawToken)
return {
...account,
expiresAt: subscriptionExpiresAt, // 前端显示订阅过期时间
tokenExpiresAt, // 保留 OAuth token 过期时间
subscriptionExpiresAt // 保留原始字段
subscriptionExpiresAt,
tokenExpiresAt,
expiresAt: subscriptionExpiresAt
}
}

View File

@@ -654,6 +654,12 @@ async function getAllAccounts() {
// 转换 schedulable 字符串为布尔值(与 getAccount 保持一致)
accountData.schedulable = accountData.schedulable !== 'false' // 默认为true只有明确设置为'false'才为false
const tokenExpiresAt = accountData.expiresAt || null
const subscriptionExpiresAt =
accountData.subscriptionExpiresAt && accountData.subscriptionExpiresAt !== ''
? accountData.subscriptionExpiresAt
: null
// 不解密敏感字段,只返回基本信息
accounts.push({
...accountData,
@@ -663,7 +669,9 @@ async function getAllAccounts() {
// ✅ 前端显示订阅过期时间(业务字段)
// 注意:前端看到的 expiresAt 实际上是 subscriptionExpiresAt
expiresAt: accountData.subscriptionExpiresAt || null,
tokenExpiresAt,
subscriptionExpiresAt,
expiresAt: subscriptionExpiresAt,
// 添加 scopes 字段用于判断认证方式
// 处理空字符串和默认值的情况

View File

@@ -793,6 +793,12 @@ async function getAllAccounts() {
}
}
const tokenExpiresAt = accountData.expiresAt || null
const subscriptionExpiresAt =
accountData.subscriptionExpiresAt && accountData.subscriptionExpiresAt !== ''
? accountData.subscriptionExpiresAt
: null
// 不解密敏感字段,只返回基本信息
accounts.push({
...accountData,
@@ -803,7 +809,9 @@ async function getAllAccounts() {
refreshToken: maskedRefreshToken,
// ✅ 前端显示订阅过期时间(业务字段)
expiresAt: accountData.subscriptionExpiresAt || null,
tokenExpiresAt,
subscriptionExpiresAt,
expiresAt: subscriptionExpiresAt,
// 添加 scopes 字段用于判断认证方式
// 处理空字符串的情况