first commit
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
import {refreshToken} from '../api/commonApi.js'
|
||||
import dayjs from '../uni_modules/uview-ui/libs/util/dayjs.js';
|
||||
// 此vm参数为页面的实例,可以通过它引用vuex中的变量
|
||||
module.exports = (vm) => {
|
||||
// 请求拦截
|
||||
uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
|
||||
// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
|
||||
config.data = config.data || {}
|
||||
// 根据custom参数中配置的是否需要token,添加对应的请求头
|
||||
// #ifdef APP-PLUS
|
||||
if(
|
||||
config.url!==undefined && config.url!==''
|
||||
&& config.url.indexOf('logout')==-1
|
||||
&& config.url.indexOf('Logout')==-1
|
||||
&& config.url.indexOf('login')==-1
|
||||
&& config.url.indexOf('Login')==-1
|
||||
&& config.url.indexOf('setting')==-1
|
||||
&& config.url.indexOf('regionRestrict')==-1
|
||||
&& config.url.indexOf('refresh_token')==-1
|
||||
&& config.url.indexOf('adfs')==-1
|
||||
&& config.url.indexOf('/me')==-1
|
||||
&& config.url.indexOf('sys_setting/get_list')==-1
|
||||
&& config.url.indexOf('sso/get_sso_token_by_code')==-1
|
||||
&& config.url.indexOf('sso/user_sso_login')==-1
|
||||
&& config.url.indexOf('sso/mock_user_sso_login')==-1
|
||||
&& config.url.indexOf('write_log')==-1
|
||||
)
|
||||
{
|
||||
let siteData = uni.getStorageSync("siteData");
|
||||
//模拟内网登录 打包删除
|
||||
// siteData.internalTag=true;
|
||||
//模拟内网登录 打包删除
|
||||
if(siteData!==undefined && siteData!==null && siteData.internalTag===false)
|
||||
{
|
||||
getApp().checkLocationAndVPN();
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
if(config?.custom?.auth) {
|
||||
const token = uni.getStorageSync("token")
|
||||
const clientId = uni.getStorageSync("clientId")
|
||||
config.header.Authorization = token;
|
||||
config.header.ClientId = clientId;
|
||||
// #ifdef APP-PLUS
|
||||
config.header.Origin = config.custom.origin;
|
||||
// #endif
|
||||
if(config.url.indexOf('refresh_token')==-1 ){
|
||||
// checkToken();
|
||||
}else{
|
||||
config.header.RefreshToken = uni.getStorageSync("refreshToken")
|
||||
}
|
||||
}
|
||||
return config
|
||||
}, config => { // 可使用async await 做异步操作
|
||||
return Promise.reject(config)
|
||||
})
|
||||
|
||||
// 响应拦截
|
||||
uni.$u.http.interceptors.response.use((response) => {
|
||||
/* 对响应成功做点什么 可使用async await 做异步操作*/
|
||||
const data = response.data
|
||||
|
||||
// 自定义参数
|
||||
// const custom = response.config?.custom
|
||||
if (data.code != 0) {
|
||||
// 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
|
||||
if (data.success==false && data.message) {
|
||||
console.log(data.message)
|
||||
}
|
||||
let url = response.config.url
|
||||
let isCheck = (url!==undefined && url!==''
|
||||
&& url.indexOf('logout')==-1
|
||||
&& url.indexOf('Logout')==-1
|
||||
&& url.indexOf('login')==-1
|
||||
&& url.indexOf('Login')==-1
|
||||
&& url.indexOf('setting')==-1
|
||||
&& url.indexOf('regionRestrict')==-1
|
||||
&& url.indexOf('refresh_token')==-1
|
||||
&& url.indexOf('adfs')==-1
|
||||
&& url.indexOf('/me')==-1
|
||||
&& url.indexOf('sys_setting/get_list')==-1
|
||||
&& url.indexOf('sso/get_sso_token_by_code')==-1
|
||||
&& url.indexOf('save_confirm_log')==-1
|
||||
&& url.indexOf('write_log')==-1);
|
||||
if(isCheck){
|
||||
checkIP(response.header)
|
||||
}
|
||||
|
||||
if(url.indexOf('mock_user_sso_login')!=-1){
|
||||
checkIP(response.header)
|
||||
}
|
||||
// // 如果需要catch返回,则进行reject
|
||||
// if (custom?.catch) {
|
||||
// return Promise.reject(data)
|
||||
// } else {
|
||||
// // 否则返回一个pending中的promise,请求不会进入catch中
|
||||
// return new Promise(() => {})
|
||||
// }
|
||||
}
|
||||
return data === undefined ? {} : data
|
||||
}, (error) => {
|
||||
console.log(error)
|
||||
if( error.errMsg=="request:ok") {
|
||||
error.errMsg= "request:fail";
|
||||
if(error.data!=undefined){
|
||||
if(error.data.message!=undefined){
|
||||
if(error.data.message=="The token was expected to have 3 parts, but got 1."){
|
||||
uni.$u.toast(error.errMsg)
|
||||
kickout()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(error.errMsg!==undefined && error.errMsg!=="request:fail" && error.errMsg!=="request:ok" && error.errMsg.indexOf('-1')<=0 && !error.errMsg.includes("request:fail abort")){
|
||||
uni.$u.toast(error.errMsg)
|
||||
}
|
||||
|
||||
switch (error.statusCode) {
|
||||
case 403:
|
||||
break;
|
||||
case 400:
|
||||
kickout()
|
||||
case 401:
|
||||
if(error.config.url.indexOf('refresh_token')==-1 && error.config.url.indexOf('logout')==-1){
|
||||
return tokenRefresh().then(_ => {
|
||||
error.config.header.Authorization = uni.getStorageSync("token");
|
||||
error.config.header.RefreshToken = uni.getStorageSync("refreshToken")
|
||||
error.config.baseURL = undefined;
|
||||
return uni.$u.http.request(error.config);
|
||||
})
|
||||
}else{
|
||||
kickout()
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return Promise.reject(error)
|
||||
})
|
||||
|
||||
}
|
||||
function tokenRefresh(){
|
||||
let oldToken = uni.getStorageSync("token");
|
||||
if (oldToken !== null && oldToken !== '') {
|
||||
return refreshToken({})
|
||||
.then((data) => {
|
||||
uni.setStorageSync("token",data.accessToken);
|
||||
uni.setStorageSync("tokenTime",dayjs().unix());
|
||||
return Promise.resolve(true)
|
||||
})
|
||||
.catch(error => {
|
||||
kickout()
|
||||
})
|
||||
} else {
|
||||
kickout()
|
||||
}
|
||||
}
|
||||
function checkToken(){
|
||||
let now = Math.floor(new Date().getTime() / 1000);
|
||||
let tokenTime = uni.getStorageSync("tokenTime");
|
||||
let token = uni.getStorageSync("token")
|
||||
//4 min refresh token
|
||||
|
||||
if(token!="" && now - tokenTime>240){
|
||||
tokenRefresh()
|
||||
}
|
||||
}
|
||||
function kickout() {
|
||||
uni.removeStorageSync("userData");
|
||||
uni.removeStorageSync("token");
|
||||
uni.removeStorageSync("idToken");
|
||||
uni.removeStorageSync("clientId");
|
||||
uni.removeStorageSync("refreshToken");
|
||||
uni.redirectTo({
|
||||
url:'/pages/login/login'
|
||||
})
|
||||
}
|
||||
function checkIP(header){
|
||||
let isInternal = header.IsInternal
|
||||
let macauIP = header.MacauIP
|
||||
//console.log(header);
|
||||
if(isInternal!=undefined){
|
||||
let internal = false;
|
||||
if(isInternal=="true") internal = true;
|
||||
let siteData = uni.getStorageSync("siteData");
|
||||
if(siteData){
|
||||
siteData.internalTag = internal;
|
||||
if(macauIP!=undefined && macauIP!="" && macauIP == "true")
|
||||
siteData.macauIp = true;
|
||||
else
|
||||
siteData.macauIp = false;
|
||||
uni.setStorageSync("siteData",siteData);
|
||||
}
|
||||
/*if(!internal){
|
||||
if(macauIP!=undefined && macauIP!="" && macauIP == "false"){
|
||||
getApp().navTo('/pages/regionRestrict/regionRestrict?type=7',0,false); //8
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user