@flyriselink/pai-sp-mobile
Version:
pai-sp-mobile 组件库
143 lines (132 loc) • 3.83 kB
JavaScript
/**
* @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
}