2***@qq.com
2***@qq.com
  • 发布:2026-01-26 10:53
  • 更新:2026-01-26 14:16
  • 阅读:80

微信小程序token失效后就这样

分类:uniCloud

uniapp开发微信小程序,登录的token失效后就这样,服务商阿里云

2026-01-26 10:53 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

在运行模式中看看报错位置在哪里呢

Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

token 失效后“就这样”通常表现为接口 401、页面空白或一直 loading。根本原因是:

  1. 前端本地缓存的 token 已经过期;
  2. 服务端返回 401 后,前端没有自动刷新 token,也没有引导用户重新登录。

在 uni-app + 阿里云 uniCloud 的微信小程序场景下,推荐按下面步骤处理。

  1. 统一封装请求
    把 uni.request 封装到一个文件(如 utils/request.js),在响应拦截器里判断状态码:
// utils/request.js  
const baseURL = 'https://xxx.bspapp.com';   // 你的阿里云云函数域名  

function request(options) {  
  return new Promise((resolve, reject) => {  
    uni.request({  
      url: baseURL + options.url,  
      method: options.method || 'GET',  
      data: options.data || {},  
      header: {  
        'content-type': 'application/json',  
        'authorization': uni.getStorageSync('token') || ''  
      },  
      success: (res) => {  
        const { statusCode, data } = res;  
        if (statusCode === 401) {  
          // token 失效,自动刷新或重新登录  
          return refreshToken().then(() => {  
            // 重新发一次当前请求  
            return request(options).then(resolve).catch(reject);  
          }).catch(() => {  
            // 刷新失败,跳转登录  
            uni.navigateTo({ url: '/pages/login/index' });  
            reject(data);  
          });  
        }  
        resolve(data);  
      },  
      fail: reject  
    });  
  });  
}  

// 刷新 token 示例  
function refreshToken() {  
  return new Promise((resolve, reject) => {  
    uniCloud.callFunction({  
      name: 'refreshToken',   // 云函数名称  
      data: {  
        refreshToken: uni.getStorageSync('refreshToken')  
      },  
      success: (res) => {  
        const { token, refreshToken } = res.result;  
        uni.setStorageSync('token', token);  
        uni.setStorageSync('refreshToken', refreshToken);  
        resolve();  
      },  
      fail: reject  
    });  
  });  
}  

export default request;
  1. 云函数 refreshToken
    在 uniCloud/cloudfunctions/refreshToken/index.js 中,用 refreshToken 换一对新的 accessToken + refreshToken,并返回给前端。refreshToken 建议存到云数据库或 redis,设置较长有效期(如 7 天)。

  2. 小程序域名白名单
    如果刷新接口也 401,请确认 https://xxx.bspapp.com 已配置到微信小程序后台 → 开发 → 开发设置 → 服务器域名 → request 合法域名。
    配置指引

  3. 调试技巧

    • 真机调试时打开 vConsole,看 401 返回体;
    • 在阿里云 uniCloud 控制台 → 云函数日志里查看 refreshToken 是否被调用、是否报错;
    • 若 refreshToken 也过期,直接清掉本地缓存,让用户重新登录即可。

按以上流程,token 失效后会先静默刷新,刷新失败再跳转登录页,不会出现“就这样”卡死的情况。

内容为 AI 生成,仅供参考

要回复问题请先登录注册