You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修正刷新令牌API调用条件:实现每60分钟自动调用

问题分析与修正方案

原代码问题

  1. 逻辑判断完全错误:原条件expires_in * 1000 > Date.now() + 3600000的逻辑不符合“每60分钟刷新一次”的需求,且数值对比逻辑颠倒,导致页面重载时误触发刷新。
  2. 缺少刷新时间跟踪:没有记录上次调用刷新令牌API的时间,无法通过时间间隔判断是否需要触发刷新。

修正后的实现代码

要实现每60分钟调用一次刷新令牌API,核心是跟踪上次刷新的时间点,并在页面重载时检查时间间隔。以下是基于localStorage持久化的方案(避免页面重载后丢失时间记录):

// 从localStorage获取上次刷新时间,无记录则初始化为0
const lastRefreshTime = parseInt(localStorage.getItem('lastRefreshTime')) || 0;
const refreshInterval = 3600000; // 60分钟对应的毫秒数
const expires_in = 3600; // 来自认证API的令牌有效期(秒)

if (refreshToken && Date.now() - lastRefreshTime > refreshInterval) {
    // 执行刷新令牌函数(替换为实际API调用逻辑)
    function refreshTokenFunction() {
        return fetch('/api/refresh-token', {
            method: 'POST',
            body: JSON.stringify({ refreshToken })
        }).then(res => res.json());
    }

    refreshTokenFunction().then(() => {
        // 刷新成功后,更新上次刷新时间为当前时间
        localStorage.setItem('lastRefreshTime', Date.now().toString());
    }).catch(err => {
        console.error('刷新令牌失败:', err);
    });
} else {
    console.log("未到刷新时间,或无有效refreshToken");
}

关键说明

  • 持久化时间记录:用localStorage存储lastRefreshTime,确保页面关闭或重载后仍能读取到上次刷新的时间点。
  • 正确的时间间隔判断:通过Date.now() - lastRefreshTime > refreshInterval检查距离上次刷新是否已超过60分钟。
  • 刷新后更新时间:必须在刷新令牌成功后更新lastRefreshTime,否则下次页面重载仍会重复触发刷新。
  • 可选方案:如果仅需在当前会话内维持刷新间隔,可改用全局变量或状态管理工具(如React/Vue的状态)存储lastRefreshTime,但页面重载后会重置时间记录。

内容的提问来源于stack exchange,提问作者Waqas Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:26:01