uniapp开发微信小程序,登录的token失效后就这样,服务商阿里云
2***@qq.com
- 发布:2026-01-26 10:53
- 更新:2026-01-26 14:16
- 阅读:80
该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
token 失效后“就这样”通常表现为接口 401、页面空白或一直 loading。根本原因是:
- 前端本地缓存的 token 已经过期;
- 服务端返回 401 后,前端没有自动刷新 token,也没有引导用户重新登录。
在 uni-app + 阿里云 uniCloud 的微信小程序场景下,推荐按下面步骤处理。
- 统一封装请求
把 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;
-
云函数 refreshToken
在 uniCloud/cloudfunctions/refreshToken/index.js 中,用 refreshToken 换一对新的 accessToken + refreshToken,并返回给前端。refreshToken 建议存到云数据库或 redis,设置较长有效期(如 7 天)。 -
小程序域名白名单
如果刷新接口也 401,请确认https://xxx.bspapp.com已配置到微信小程序后台 → 开发 → 开发设置 → 服务器域名 → request 合法域名。
配置指引 -
调试技巧
- 真机调试时打开 vConsole,看 401 返回体;
- 在阿里云 uniCloud 控制台 → 云函数日志里查看 refreshToken 是否被调用、是否报错;
- 若 refreshToken 也过期,直接清掉本地缓存,让用户重新登录即可。
按以上流程,token 失效后会先静默刷新,刷新失败再跳转登录页,不会出现“就这样”卡死的情况。
内容为 AI 生成,仅供参考