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