UNPKG

@flyriselink/pai-sp-mobile

Version:

pai-sp-mobile 组件库

143 lines (132 loc) 3.83 kB
/** * @version 3.0.4 * @Author lu-ch * 文档: https://www.quanzhan.co/luch-request/ * github: https://github.com/lei-mu/luch-request * DCloud: http://ext.dcloud.net.cn/plugin?id=392 */ import Request from 'luch-request' import flyrise from '../utils/flyrise.js' import { refreshToken } from '../api/auth.js' const http = new Request() http.setConfig((config) => { /* 设置全局配置 */ config.header = { ...config.header } return config }) http.interceptors.request.use((config) => { config.baseURL = flyrise.getBasePath() /* 根域名不同 */ /* 请求之前拦截器。可以使用async await 做异步操作 */ if (config.header.Authorization === undefined) { config.header = { ...config.header, Authorization: flyrise.getToken() } } return config }, (config) => { return Promise.reject(config) }) http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作 */ // console.log('>>>app-code-interceptors'); // console.log('>>>app-code-isReset-1:' + response.data.code); if (response.data.code == 401) { // token值过期 // console.log('>>>app-code-isReset:-2'); let newToken = null; if (flyrise.isMicro()) { newToken = await sendNativeReseive() //凌云微应用使用 } else { newToken = await networkToken() //单独打包小程序使用 } // console.log('>>>app宿主App回传的数据-reseive:' + JSON.stringify(newToken)); let config = await doRequestConfig(response, newToken) // console.log('>>>app宿主App回传的数据-config:' + JSON.stringify(config)); const resetResponse = await http.request(config) // console.log('>>>app重新请求的数据-resetResponse:' + JSON.stringify(resetResponse)); if (resetResponse) { response = resetResponse; } } return response }, (response) => { // 请求错误做点什么。可以使用async await 做异步操作 console.log(response) return Promise.reject(response) }) /**小程序从原生 app 端获取 token 值*/ var sendNativeReseive = function() { return new Promise((resolve, reject) => { uni.sendNativeEvent('refresh_token', { msg: 'unimp refresh_token' }, ret => { console.log('>>>app-refresh_token:' + JSON.stringify(ret)); if (ret != null && ret.isSuccess) { let token = ret.token uni.setStorageSync("token", token) resolve(token) } else { reject("") } }) }) } /**网络获取 token 值*/ var networkToken = function() { return new Promise((resolve, reject) => { let refres = uni.getStorageSync("refresh_token", "") if (!refres) { return } refreshToken(refres).then(res => { let data = res.data if (res.statusCode != 200 || !data) { console.log(">>>app---刷新失败1") reloginError() reject("") return } let token = data.token_type + ' ' + data.access_token uni.setStorageSync("token", token) let refreshToken = data.refresh_token uni.setStorageSync("refresh_token", refreshToken) console.log("刷新成功") resolve(token) }).catch(err => { console.log(">>>app---刷新失败2") reloginError() reject("") }) }) } var reloginError = function() { console.log(">>>app---刷新失败3") if (flyrise.isMicro()) { uni.showModal({ title: '温馨提示', content: `用户校验失败,请重新登录`, success: function(res) { if (res.confirm) { flyrise.finish() } } }); } else { uni.reLaunch({ url: "/pages/login/index" }) } } var doRequestConfig = function(res, token) { return new Promise((resolve, reject) => { let config = res.config config.header.Authorization = token resolve(config) }) } export { http }