| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- // import {
- // refreshTokenFn
- // } from "@/api/services/login.js";
- import api from "@/config/api.js";
- import Request from "@/utils/lib/request/index.js";
- import Foundation from "@/utils/Foundation.js";
- import md5 from "@/utils/md5.js";
- import storage from "@/utils/storage.js";
- import jwt from '@/utils/js_sdk/t-jwt/jwt.js';
- import uuid from "@/utils/uuid.modified.js";
- import store from "../store";
- let isNavigateTo = false
- function cleanStorage() {
- uni.showToast({
- title: "你的登录状态已过期,请重新登录",
- icon: "none",
- duration: 1500,
- });
- if (uni.showLoading()) {
- uni.hideLoading();
- }
- storage.setHasLogin(false);
- storage.setAccessToken("");
- // storage.setRefreshToken("");
- storage.setUuid("");
- storage.setUserInfo({});
- /* if (!isNavigateTo) {
- isNavigateTo = true
- // 防抖处理跳转
- // #ifdef MP-WEIXIN
- uni.navigateTo({
- url: "/pages/login/index",
- });
- // #endif
- // #ifndef MP-WEIXIN
- uni.navigateTo({
- url: "/pages/passport/login",
- });
- // #endif
- } */
- }
- let http = new Request();
- /**
- * 创建uuid方法
- */
- const createUuid = () => {
- if (!storage.getUuid()) {
- storage.setUuid(uuid.v4());
- console.log("uuid", storage.getUuid());
- }
- }
- http.setConfig((config) => {
- createUuid();
- /* 设置全局配置 */
- config.baseURL = api.serve;
- config.header = {
- ...config.header,
- };
- config.validateStatus = (statusCode) => {
- // 不论什么状态,统一在正确中处理
- return true;
- };
- return config;
- });
- http.interceptors.request.use(
- (config) => {
- /* 请求之前拦截器。可以使用async await 做异步操作 */
- let accessToken = storage.getAccessToken();
- if(storage.getInviter()){
- config.header.inviter = storage.getInviter();
- }
-
- console.log("请求前处理");
- if (accessToken) {
- /**
- * 使用JWT解析
- * 小于当前时间将当前token清除
- */
- const decodeJwt = jwt(accessToken);
- const timing = new Date().getTime() / 1000
- if (decodeJwt.exp <= timing) {
- accessToken = ""
- storage.setAccessToken('')
- }
-
- const nonce = Foundation.randomString(6);
- const timestamp = parseInt(new Date().getTime() / 1000);
- const sign = md5(nonce + timestamp + accessToken);
- const _params = {
- nonce,
- timestamp,
- sign,
- };
- let params = config.params || {};
- params = {
- ...params,
- ..._params
- };
- config.params = params;
- // config.header.accessToken = accessToken;
- config.header.Authorization = 'Bearer '+accessToken;
- }
- createUuid();
- config.header = {
- ...config.header,
- uuid: storage.getUuid()
- };
- return config;
- },
- (config) => {
- return Promise.reject(config);
- }
- );
- // 是否正在刷新的标记
- let isRefreshing = false;
- //重试队列
- let requests = [];
- // 必须使用异步函数,注意
- http.interceptors.response.use(
- async (response) => {
- isNavigateTo = false;
- uni.showLoading() ? uni.hideLoading() : '';
- let token = storage.getAccessToken();
- console.log("请求后的处理",response);
- // token存在但401,说明过期了
- if ((token && response.statusCode === 401) || response.data.status === 401) {
- console.log('token过期或无效,跳转登录', token);
- cleanStorage(); // 清理缓存中的token、用户信息等
- uni.showToast({
- title: '登录已过期,请重新登录',
- icon: 'none',
- duration: 2000,
- complete: () => {
- setTimeout(() => {
- uni.navigateTo({
- url: '/pages/login/index'
- }); // 跳转登录页
- }, 2000);
- }
- });
- return Promise.reject('登录状态过期');
- }
- // 未登录也跳转
- if ((!token && !storage.getAccessToken() && response.statusCode === 401) || response.data.code === 401) {
- console.log('无token,跳转登录');
- cleanStorage();
- uni.showToast({
- title: '请先登录',
- icon: 'none',
- duration: 2000,
- complete: () => {
- setTimeout(() => {
- uni.navigateTo({
- url: '/pages/login/index'
- });
- }, 2000);
- }
- });
- return Promise.reject('未登录');
- }
- // 请求成功但业务失败
- if (
- (response.statusCode === 200 && !response.data.success) ||
- response.statusCode === 400
- ) {
- if (response.data.message) {
- uni.showToast({
- title: response.data.message,
- icon: "none",
- duration: 1500,
- success: () => { store.state.isShowToast = true; },
- fail: () => { store.state.isShowToast = false; },
- complete: () => { store.state.isShowToast = false; }
- });
- }
- }
- return response;
- },
- (error) => {
- return Promise.reject(error);
- }
- );
- export {
- http
- };
- export const Method = {
- GET: "GET",
- POST: "POST",
- PUT: "PUT",
- DELETE: "DELETE",
- };
|