diff --git a/src/pages/user/store/login.ts b/src/pages/user/store/login.ts index 8258533..c8b94cf 100644 --- a/src/pages/user/store/login.ts +++ b/src/pages/user/store/login.ts @@ -2,6 +2,33 @@ import { query } from '@/modules'; import { message } from 'antd'; import { create } from 'zustand'; import { history } from '@/utils/history'; +// 如果自己是在iframe中登录,需要调用这个方法 +export const postLoginInIframe = (token: string) => { + console.log('window.parent !== window', window.parent !== window); + if (window.parent === window) { + return; + } + // 获取父窗口的来源 + const parentOrigin = window.location.ancestorOrigins ? window.location.ancestorOrigins[0] : document.referrer; + + // 检查父窗口的来源是否合法 + const allowedOrigins = ['http://localhost', /^https?:\/\/(.+\.)?on-ai\.ai$/, /^https?:\/\/(.+\.)?xiongxiao\.me$/]; + + let targetOrigin: string | null = null; + + // 根据来源动态选择 targetOrigin + if (allowedOrigins.some((origin) => (typeof origin === 'string' ? parentOrigin.includes(origin) : origin.test(parentOrigin)))) { + targetOrigin = parentOrigin; // 使用合法来源作为 targetOrigin + } + // 如果找到合法的 targetOrigin,则发送消息 + if (targetOrigin) { + const message = { type: 'login-from-iframe', data: { token } }; + parent.postMessage(message, targetOrigin); + } else { + console.warn('Parent origin is not allowed:', parentOrigin); + } +}; + type LoginStore = { loading: boolean; setLoading: (loading: boolean) => void; @@ -35,6 +62,10 @@ export const useLoginStore = create((set, get) => { set({ isLogin: true }); query.saveToken(token); await new Promise((resolve) => setTimeout(resolve, 1000)); + if (window.parent !== window) { + postLoginInIframe(token); + await new Promise((resolve) => setTimeout(resolve, 3000)); + } const search = new URLSearchParams(window.location.search); const redirect = search.get('redirect'); if (redirect) {