http.interceptor.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //免登录接口
  2. let noLoginUrl = [
  3. '/addons/cms/api.common/init',
  4. '/addons/cms/api.ems/send',
  5. '/addons/cms/api.sms/send',
  6. '/addons/cms/api.archives/index',
  7. '/addons/cms/api.archives/detail',
  8. '/addons/cms/api.login/login',
  9. '/addons/cms/api.login/mobilelogin',
  10. '/addons/cms/api.login/register',
  11. '/addons/cms/api.login/resetpwd',
  12. '/addons/cms/api.login/wxLogin',
  13. '/addons/cms/api.login/appLogin',
  14. '/addons/cms/api.login/getWechatMobile',
  15. '/addons/cms/api.my/aboutus',
  16. '/addons/cms/api.my/agreement',
  17. '/addons/third/api/getAuthUrl',
  18. '/addons/third/api/callback',
  19. '/addons/third/api/account',
  20. '/addons/cms/api.search/index',
  21. '/addons/cms/api.tag/index',
  22. '/addons/cms/api.common/getCategory',
  23. '/addons/cms/api.user/getSigned',
  24. '/addons/cms/api.user/userInfo',
  25. '/addons/cms/api.comment/index',
  26. '/addons/vip/api.index/index',
  27. '/addons/cms/api.diyform/formList',
  28. '/addons/cms/api.diyform/show'
  29. ];
  30. //设置session_id
  31. const getSessionId = function(vm) {
  32. let session = vm.$util.getDb('session');
  33. if (!session) {
  34. let guid = vm.$u.guid();
  35. vm.$util.setDb('session', guid);
  36. return guid;
  37. }
  38. return session;
  39. }
  40. // 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
  41. // 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
  42. const install = (Vue, vm) => {
  43. let url = 'https://www.ririduojin.com'
  44. // #ifdef H5
  45. typeof window.fastUrl !== 'undefined' ? url = window.fastUrl : '',
  46. // #endif
  47. Vue.prototype.$u.http.setConfig({
  48. baseUrl: url,
  49. header: {
  50. 'content-type': 'application/json'
  51. },
  52. originalData: true
  53. });
  54. // 请求拦截,配置Token等参数
  55. Vue.prototype.$u.http.interceptor.request = (config) => {
  56. //在需要登录的接口,请求前判断token 是否存在,不存在则到登录
  57. let url = config.url;
  58. if(url.indexOf('?') != -1){
  59. let arr = url.split('?');
  60. url = arr[0];
  61. }
  62. if (noLoginUrl.indexOf(url) == -1 && !vm.vuex_token) {
  63. vm.$u.route('/pages/login/mobilelogin');
  64. return false;
  65. }
  66. config.header.token = vm.vuex_token;
  67. //设置session_id
  68. config.header.sid = getSessionId(vm);
  69. config.header.uid = vm.vuex_user.id || 0;
  70. config.header['x-requested-with'] = 'xmlhttprequest';
  71. if (config.method == 'POST') {
  72. config.data['__token__'] = vm.vuex__token__;
  73. }
  74. return config;
  75. }
  76. // 响应拦截,判断状态码是否通过
  77. Vue.prototype.$u.http.interceptor.response = (res) => {
  78. //返回__token__,设置
  79. if (res.header.__token__) {
  80. vm.$u.vuex('vuex__token__', res.header.__token__);
  81. }
  82. let result = res.data;
  83. if(result.data && result.data.__token__){
  84. vm.$u.vuex('vuex__token__', result.data.__token__);
  85. }
  86. switch (result.code) {
  87. case 1:
  88. case 0:
  89. return result;
  90. break;
  91. case 401:
  92. //需要登录的接口,当token 过期时,到登录页面
  93. vm.$u.vuex('vuex_token', '');
  94. vm.$u.route('/pages/login/mobilelogin');
  95. return result;
  96. break;
  97. case 403: //没有权限访问
  98. uni.showToast({
  99. icon: "none",
  100. title: result.msg
  101. })
  102. return result;
  103. break;
  104. default:
  105. if (res.statusCode == 200) {
  106. return res.data;
  107. } else {
  108. console.error(res)
  109. vm.$u.toast('网络请求错误!');
  110. }
  111. }
  112. }
  113. }
  114. export default {
  115. install
  116. }