http.interceptor.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import Global from '../utils/global.js'
  2. let baseUrl=Global.baseUrl
  3. let tokenUrl = `${baseUrl}/blade-auth/oauth/token?tenantId=000000&username=admin&password=21232f297a57a5a743894a0e4a801fc3&grant_type=password&scope=all&type=account`
  4. let myConfig={}
  5. const refreshToken = ()=>{
  6. return new Promise((resolve,reject)=>{
  7. uni.request({
  8. url: tokenUrl,
  9. method: "POST",
  10. header:{
  11. Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0"
  12. },
  13. success: (res)=>{
  14. let token=res.data.token_type+" "+res.data.access_token
  15. let tokenExprieIn=res.data.expires_in
  16. let tokenExpireTime = Date.now() + tokenExprieIn * 1000
  17. let data=JSON.stringify({"token":token,"tokenExpireTime":tokenExpireTime})
  18. uni.setStorage({key: 'token',data: data})
  19. resolve(token)
  20. },
  21. fail: (err)=>{
  22. reject(err)
  23. }
  24. })
  25. })
  26. }
  27. function getToken () {
  28. let tokenObj = {}
  29. try {
  30. tokenObj = uni.getStorageSync("token")
  31. tokenObj = tokenObj ? JSON.parse(tokenObj) : {}
  32. } catch(e) {
  33. console.error('get token from storage error')
  34. }
  35. return tokenObj
  36. }
  37. const install = async (Vue, vm) => {
  38. // 此为自定义配置参数,具体参数见上方说明
  39. Vue.prototype.$u.http.setConfig({
  40. baseUrl: baseUrl,
  41. loadingText: '努力加载中~',
  42. loadingTime: 800,
  43. header: {
  44. 'content-type': 'application/json;charset=UTF-8'
  45. },
  46. });
  47. // 请求拦截,配置Token等参数
  48. Vue.prototype.$u.http.interceptor.request = (async (config) => {
  49. const tokenObj = getToken()
  50. config.header['Blade-Auth'] = tokenObj.token
  51. if (tokenObj.token && tokenObj.tokenExpireTime) {
  52. const now = new Date() + 0;
  53. if (now >= tokenObj.tokenExpireTime) {
  54. config.header['Blade-Auth']= await refreshToken()
  55. }
  56. } else {
  57. config.header['Blade-Auth'] = await refreshToken()
  58. }
  59. return config;
  60. })
  61. Vue.prototype.$u.http.interceptor.response = (async (res) => {
  62. return new Promise((resolve,reject)=>{
  63. if(res.code == 200) {
  64. return resolve(res.data);
  65. }else if(res.code==400){
  66. return resolve(res);
  67. }else if(res.code == 401) {
  68. uni.showToast({
  69. title: '授权已过期,请重新进入',
  70. icon: 'none',
  71. })
  72. return reject(res);
  73. } else if(res.code == 500){
  74. uni.showToast({
  75. title:'服务器异常',
  76. icon:'none'
  77. })
  78. return reject(res);
  79. } else {
  80. // 如果返回false,则会调用Promise的reject回调,
  81. // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
  82. return reject(res);
  83. }
  84. });
  85. })
  86. // Vue.prototype.$u.http.interceptor.response = async (res) => {
  87. // if(res.code == 200) {
  88. // return res.data;
  89. // }else if(res.code==401){
  90. // uni.showToast({
  91. // title:'授权已过期,请重新进入小程序',
  92. // icon:'none',
  93. // })
  94. // return false
  95. // }
  96. // else if(res.code==500){
  97. // uni.showToast({
  98. // title:'服务器异常',
  99. // icon:'none'
  100. // })
  101. // }
  102. // else {
  103. // console.log(res)
  104. // // 如果返回false,则会调用Promise的reject回调,
  105. // // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
  106. // return false;
  107. // }
  108. // }
  109. }
  110. export default {
  111. install
  112. }