7 changed files with 119 additions and 11 deletions
@ -0,0 +1 @@ |
|||
export const host = '//www.kuailelunwen.com'; |
@ -0,0 +1,32 @@ |
|||
// utils/login.js
|
|||
|
|||
import axios from 'axios' |
|||
|
|||
export async function autoLoginByToken() { |
|||
const urlParams = new URLSearchParams(window.location.search) |
|||
const token = urlParams.get('token') |
|||
|
|||
if (token) { |
|||
try { |
|||
const res = await axios.post('/agentnew/token_login', { token: token },{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded' |
|||
}, |
|||
}) |
|||
if (res.data.status) { |
|||
// 可选:将 token 存入 localStorage
|
|||
localStorage.setItem('token', res.data.data) |
|||
|
|||
const url = new URL(window.location.href); |
|||
url.searchParams.delete('token'); |
|||
window.location.replace(url.toString()); |
|||
return true |
|||
} else { |
|||
return false |
|||
} |
|||
} catch (e) { |
|||
console.error('请求异常', e) |
|||
} |
|||
} |
|||
return false |
|||
} |
@ -0,0 +1,46 @@ |
|||
let isRefreshing = false |
|||
let refreshSubscribers = [] |
|||
|
|||
function onRefreshed(newToken) { |
|||
refreshSubscribers.forEach(cb => cb(newToken)) |
|||
refreshSubscribers = [] |
|||
} |
|||
|
|||
function subscribeTokenRefresh(cb) { |
|||
refreshSubscribers.push(cb) |
|||
} |
|||
|
|||
/** |
|||
* 刷新 Token 并重新请求 |
|||
* @param {Object} originalRequest - 原始 axios 请求配置 |
|||
* @param {AxiosInstance} instance - axios 实例 |
|||
*/ |
|||
export async function handleTokenRefresh(originalRequest, instance) { |
|||
if (isRefreshing) { |
|||
return new Promise(resolve => { |
|||
subscribeTokenRefresh(token => { |
|||
originalRequest.headers.Authorization = `Bearer ${token}` |
|||
resolve(instance(originalRequest)) |
|||
}) |
|||
}) |
|||
} |
|||
|
|||
isRefreshing = true |
|||
try { |
|||
const res = await instance.post('/agentnew/refresh_token') |
|||
const newToken = res.data |
|||
localStorage.setItem('token', newToken) |
|||
|
|||
isRefreshing = false |
|||
onRefreshed(newToken) |
|||
|
|||
originalRequest.headers.Authorization = `Bearer ${newToken}` |
|||
return instance(originalRequest) |
|||
} catch (err) { |
|||
isRefreshing = false |
|||
refreshSubscribers = [] |
|||
localStorage.removeItem('token') |
|||
window.location.href = this.$host; |
|||
return Promise.reject(err) |
|||
} |
|||
} |
Loading…
Reference in new issue