mirror of
https://github.com/KwiTsukasa/kt-template-online-web.git
synced 2026-05-27 16:35:47 +08:00
fix(web): 接收后台授权回跳
This commit is contained in:
parent
ed37ca5d12
commit
879603bbad
@ -18,6 +18,9 @@ const ACCESS_CODES_KEY = "kt-admin-access-codes";
|
||||
const USER_INFO_KEY = "kt-admin-user-info";
|
||||
const LOGIN_REDIRECT_MARK_KEY = "kt-admin-login-redirect-at";
|
||||
const LOGIN_REDIRECT_COOLDOWN = 10 * 1000;
|
||||
const AUTH_TRANSFER_TOKEN_KEY = "ktAccessToken";
|
||||
const AUTH_TRANSFER_CODES_KEY = "ktAccessCodes";
|
||||
const AUTH_TRANSFER_USER_KEY = "ktUserInfo";
|
||||
|
||||
let refreshPromise: Promise<string | null> | null = null;
|
||||
let redirectingToAdminLogin = false;
|
||||
@ -62,6 +65,48 @@ export const persistAuthData = ({
|
||||
}
|
||||
};
|
||||
|
||||
const parseAuthTransferJson = <T>(value: string | null) => {
|
||||
if (!value) return undefined;
|
||||
|
||||
try {
|
||||
return JSON.parse(value) as T;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
const removeAuthTransferParams = (url: URL) => {
|
||||
url.searchParams.delete(AUTH_TRANSFER_TOKEN_KEY);
|
||||
url.searchParams.delete(AUTH_TRANSFER_CODES_KEY);
|
||||
url.searchParams.delete(AUTH_TRANSFER_USER_KEY);
|
||||
window.history.replaceState(
|
||||
window.history.state,
|
||||
document.title,
|
||||
`${url.pathname}${url.search}${url.hash}`,
|
||||
);
|
||||
};
|
||||
|
||||
export const consumeAdminAuthRedirect = () => {
|
||||
const url = new URL(window.location.href);
|
||||
const accessToken = url.searchParams.get(AUTH_TRANSFER_TOKEN_KEY);
|
||||
|
||||
if (!accessToken) return null;
|
||||
|
||||
persistAuthData({
|
||||
accessCodes: parseAuthTransferJson<string[]>(
|
||||
url.searchParams.get(AUTH_TRANSFER_CODES_KEY),
|
||||
),
|
||||
accessToken,
|
||||
userInfo: parseAuthTransferJson<unknown>(
|
||||
url.searchParams.get(AUTH_TRANSFER_USER_KEY),
|
||||
),
|
||||
});
|
||||
clearAdminLoginRedirectMark();
|
||||
removeAuthTransferParams(url);
|
||||
|
||||
return accessToken;
|
||||
};
|
||||
|
||||
const buildAdminLoginUrl = (redirect: string) => {
|
||||
const loginUrl = new URL(config.adminLogin);
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ import config from "@/config";
|
||||
import {
|
||||
clearAdminLoginRedirectMark,
|
||||
clearPersistedAuth,
|
||||
consumeAdminAuthRedirect,
|
||||
getStoredAccessToken,
|
||||
redirectToAdminLogin,
|
||||
refreshPersistedAuth,
|
||||
@ -83,7 +84,7 @@ const redirectAfterAuthExpired = () => {
|
||||
};
|
||||
|
||||
request.interceptors.request.use(async (requestConfig) => {
|
||||
const accessToken = getStoredAccessToken();
|
||||
const accessToken = consumeAdminAuthRedirect() || getStoredAccessToken();
|
||||
|
||||
if (accessToken) {
|
||||
requestConfig.headers.Authorization = `Bearer ${accessToken}`;
|
||||
|
||||
@ -3,8 +3,11 @@ import { createPinia } from "pinia";
|
||||
import "virtual:uno.css";
|
||||
|
||||
import App from "@/App.vue";
|
||||
import { consumeAdminAuthRedirect } from "@/api/auth";
|
||||
import { router } from "@/router.js";
|
||||
|
||||
import "ant-design-vue/dist/reset.css";
|
||||
|
||||
consumeAdminAuthRedirect();
|
||||
|
||||
createApp(App).use(router).use(createPinia()).mount("#app");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user