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 } }*/ } }