731 Star 5.9K Fork 4.6K

若依 / RuoYi-App

 / 详情

无感刷新token

待办的
创建于  
2024-04-10 16:42

import store from '@/store'
import config from '@/config'
import {
getToken, removeToken
} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { wechatCodeLogin } from "@/api/login.js"
import {
toast,
showConfirm,
tansParams,
showLoading,
hideLoading
} from '@/utils/common'
import storage from '@/utils/storage'
import constant from '@/utils/constant'

let timeout = 10000
const baseUrl = config.baseUrl
let isRefreshing = false
let requests = []

const request = config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
config.header = config.header || {}
if (getToken() && !isToken) {
config.header['Authorization'] = getToken();
let params = config.data;
params.userId = storage.get(constant.userId);
params.loginName = storage.get(constant.loginName);
params.userName = storage.get(constant.userName);
params.orgId = storage.get(constant.orgId);
params.orgCode = storage.get(constant.orgCode);
params.orgName = storage.get(constant.orgName);
}
// get请求映射params参数
if (config.params) {
let url = config.url + '?' + tansParams(config.params)
url = url.slice(0, -1)
config.url = url
}
return new Promise((resolve, reject) => {
if (config.showLoading) {
showLoading('加载中...');
};
uni.request({
method: config.method || 'get',
timeout: config.timeout || timeout,
url: config.baseUrl || baseUrl + config.url,
data: config.data,
header: config.header,
dataType: 'json',
success(res) {
if (res.statusCode == 200) {
console.log(res.data)
if (res.data.code != 0) {
if(res.data.code == 60001){
if (!isRefreshing) {
isRefreshing = true;
uni.login({
"provider": "weixin",
"onlyAuthorize": true,
success: function(event) {
wechatCodeLogin(event.code).then(result => {
storage.setUserInfo(result.data);
requests.forEach(cb => cb())
requests = []
request(config);
}).catch((error)=>{
storage.set(constant.openId, error.openId);
uni.reLaunch({ url: '/pages/login' })
}).finally(() => {
isRefreshing = false
});

								},
								fail: function(err) {
									uni.reLaunch({ url: '/pages/login' })
									console.log("微信认证失败:" + err.code)
									isRefreshing = false
								},
							});
						}else{
							//多个接口刷新token时只能一个能刷新,其他都需要等待
							return new Promise((resolve)=>{
								requests.push(()=>{
									resolve(request(config))
								});
							});
						}
					}else{
						var content = res.data.msg ? res.data.msg : '系统异常' + '';
						showConfirm(content).then(res => {
						  
						})
					}
					reject(res.data);
				}
				resolve(res.data);
			} else if (res.statusCode == 404) {
				showConfirm('接口请求出错,请检查手机网络');
				reject();
			} else {
				console.log(res);
				showConfirm(res.errMsg + ':' + res.data.message + ':' + res.data.msg);
				
				reject();
			}
		},
		fail(error) {
			console.log("error=" + error);
			showConfirm('接口请求出错:' + error.errMsg);
			reject(error)
		},
		complete(res) {
			hideLoading()
		}
	})

})

}

export default request

输入图片说明
token失效后,我重新刷新,也请求了之前的接口,但是接收不到返回值了

大佬。我修改了reques.js 我想在前端做无感刷新toke,就是现在问题是,这个已经实现无感刷新token了,但是有个问题,就是刷新完token后之前的接口函数就会接收不到返回信息

评论 (0)

tear丿泪 创建了任务
tear丿泪 修改了描述
展开全部操作日志

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
2254268 itxiaocao 1578969928
Java
1
https://gitee.com/y_project/RuoYi-App.git
git@gitee.com:y_project/RuoYi-App.git
y_project
RuoYi-App
RuoYi-App

搜索帮助