-
戴鹏云 authored8178fb68
import Cookies from 'js-cookie';
const POSTMESSAGE_NAME = 'ask_qmp_qtable_token';
const COOKIE_NAME = 'ddm_token';
/** 获取(与主站共享的)登录用户token */
export function getToken() {
let token = Cookies.get(COOKIE_NAME);
if (token) return token;
try {
token = sessionStorage.getItem(COOKIE_NAME) || '';
}
catch (e: any) {
console.log('sessionStorage 被禁止访问', e.message)
}
if (token) {
Cookies.set(COOKIE_NAME, token);
}
return token;
}
/**
* 处理用户登录授权
* @param MAIN_SITE_AUTH_URL 主站处理授权地址,如 http://xxx/#/auth/otherproject?asker=
* @param MAIN_SITE_URL 主站地址
*/
export function useAuth(MAIN_SITE_AUTH_URL: string, MAIN_SITE_URL: string) {
const isAuthed = !!getToken()
// 本地有 token 跳过主站点授权
if (isAuthed) return { isAuthed };
if (window.parent === window) {
if (!sessionStorage.getItem('authing')) {
// 未登录,跳转到授权页面
sessionStorage.setItem('authing', '1');
const currUrl = encodeURIComponent(location.href);
location.href = `${MAIN_SITE_AUTH_URL}${currUrl}`;
} else {
// 授权失败
sessionStorage.removeItem('authing');
console.log('授权失败');
location.href = MAIN_SITE_URL;
}
} else {
// 主站点通过 iframe + postMessage 授权中
window.parent.postMessage(POSTMESSAGE_NAME, MAIN_SITE_URL);
window.addEventListener('message', receiveMessage);
}
function receiveMessage({ data, origin, source }: MessageEvent) {
if (origin !== MAIN_SITE_URL) return;
if (data.type === POSTMESSAGE_NAME) {
sessionStorage.setItem(COOKIE_NAME, data.token);
}
}
return { isAuthed };
}
/** 移除token */
export function removeToken() {
sessionStorage.removeItem(COOKIE_NAME)
const host = document.location.hostname
const mainhost = host.replace(/.*?(\..*?\..*?$)/, '$1')
Cookies.remove(COOKIE_NAME)
Cookies.remove(COOKIE_NAME, { path: '/', domain: host })
Cookies.remove(COOKIE_NAME, { path: '/', domain: mainhost })
console.log('====', `${COOKIE_NAME}=0;path=/;domain=${mainhost};expires=${new Date(0).toUTCString()}`)
document.cookie = `${COOKIE_NAME}=0;path=/;domain=${mainhost};expires=${new Date(0).toUTCString()}`