From 5ff8868d3e77eb0d9606942b02a70d467e077444 Mon Sep 17 00:00:00 2001 From: pan93412 Date: Sun, 27 Mar 2022 15:16:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(utils/request):=20token=20=E9=81=8E?= =?UTF-8?q?=E6=9C=9F=20(301)=20=E6=99=82=E9=87=8D=E6=96=B0=E5=B0=8E?= =?UTF-8?q?=E5=90=91=E8=87=B3=E7=99=BB=E5=85=A5=E9=A0=81=E9=9D=A2=20(#1448?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/request.js | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/utils/request.js b/src/utils/request.js index 6eae75c..34bb35c 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,5 +1,6 @@ import axios from 'axios'; -import { getCookie } from '@/utils/auth'; +import { getCookie, doLogout } from '@/utils/auth'; +import router from '@/router'; let baseURL = ''; // Web 和 Electron 跑在不同端口避免同时启动时冲突 @@ -21,8 +22,12 @@ const service = axios.create({ service.interceptors.request.use(function (config) { if (!config.params) config.params = {}; - if (baseURL[0] !== '/' && !process.env.IS_ELECTRON) { - config.params.cookie = `MUSIC_U=${getCookie('MUSIC_U')};`; + if (baseURL.length) { + if (baseURL[0] !== '/' && !process.env.IS_ELECTRON) { + config.params.cookie = `MUSIC_U=${getCookie('MUSIC_U')};`; + } + } else { + console.error("You must set up the baseURL in the service's config"); } if (!process.env.IS_ELECTRON && !config.url.includes('/login')) { @@ -42,8 +47,29 @@ service.interceptors.response.use( const res = response.data; return res; }, - error => { - return Promise.reject(error); + async error => { + /** @type {import('axios').AxiosResponse | null} */ + const response = error.response; + const data = response.data; + + if ( + response && + typeof data === 'object' && + data.code === 301 && + data.msg === '需要登录' + ) { + console.warn('Token has expired. Logout now!'); + + // 登出帳戶 + doLogout(); + + // 導向登入頁面 + if (process.env.IS_ELECTRON === true) { + router.push({ name: 'loginAccount' }); + } else { + router.push({ name: 'login' }); + } + } } );