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 USER_INFO_KEY = "kt-admin-user-info";
|
||||||
const LOGIN_REDIRECT_MARK_KEY = "kt-admin-login-redirect-at";
|
const LOGIN_REDIRECT_MARK_KEY = "kt-admin-login-redirect-at";
|
||||||
const LOGIN_REDIRECT_COOLDOWN = 10 * 1000;
|
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 refreshPromise: Promise<string | null> | null = null;
|
||||||
let redirectingToAdminLogin = false;
|
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 buildAdminLoginUrl = (redirect: string) => {
|
||||||
const loginUrl = new URL(config.adminLogin);
|
const loginUrl = new URL(config.adminLogin);
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import config from "@/config";
|
|||||||
import {
|
import {
|
||||||
clearAdminLoginRedirectMark,
|
clearAdminLoginRedirectMark,
|
||||||
clearPersistedAuth,
|
clearPersistedAuth,
|
||||||
|
consumeAdminAuthRedirect,
|
||||||
getStoredAccessToken,
|
getStoredAccessToken,
|
||||||
redirectToAdminLogin,
|
redirectToAdminLogin,
|
||||||
refreshPersistedAuth,
|
refreshPersistedAuth,
|
||||||
@ -83,7 +84,7 @@ const redirectAfterAuthExpired = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
request.interceptors.request.use(async (requestConfig) => {
|
request.interceptors.request.use(async (requestConfig) => {
|
||||||
const accessToken = getStoredAccessToken();
|
const accessToken = consumeAdminAuthRedirect() || getStoredAccessToken();
|
||||||
|
|
||||||
if (accessToken) {
|
if (accessToken) {
|
||||||
requestConfig.headers.Authorization = `Bearer ${accessToken}`;
|
requestConfig.headers.Authorization = `Bearer ${accessToken}`;
|
||||||
|
|||||||
@ -3,8 +3,11 @@ import { createPinia } from "pinia";
|
|||||||
import "virtual:uno.css";
|
import "virtual:uno.css";
|
||||||
|
|
||||||
import App from "@/App.vue";
|
import App from "@/App.vue";
|
||||||
|
import { consumeAdminAuthRedirect } from "@/api/auth";
|
||||||
import { router } from "@/router.js";
|
import { router } from "@/router.js";
|
||||||
|
|
||||||
import "ant-design-vue/dist/reset.css";
|
import "ant-design-vue/dist/reset.css";
|
||||||
|
|
||||||
|
consumeAdminAuthRedirect();
|
||||||
|
|
||||||
createApp(App).use(router).use(createPinia()).mount("#app");
|
createApp(App).use(router).use(createPinia()).mount("#app");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user