diff --git a/web/app/(commonLayout)/layout.tsx b/web/app/(commonLayout)/layout.tsx index af36d4d961..01d2086b1a 100644 --- a/web/app/(commonLayout)/layout.tsx +++ b/web/app/(commonLayout)/layout.tsx @@ -8,10 +8,12 @@ import Header from '@/app/components/header' import { EventEmitterContextProvider } from '@/context/event-emitter' import { ProviderContextProvider } from '@/context/provider-context' import { ModalContextProvider } from '@/context/modal-context' +import MessageListener from '../components/base/message-listener' const Layout = ({ children }: { children: ReactNode }) => { return ( <> + diff --git a/web/app/components/base/message-listener.tsx b/web/app/components/base/message-listener.tsx new file mode 100644 index 0000000000..fd2a860884 --- /dev/null +++ b/web/app/components/base/message-listener.tsx @@ -0,0 +1,23 @@ +'use client' +import { useEffect } from 'react' +const MessageListener = () => { + useEffect(() => { + const handleMessage = (event: MessageEvent) => { + console.log('Received message from A:', event.data) + if(event.data.action === 'auto-login') { + localStorage.setItem('auto-login', JSON.stringify(event.data.data)) + event.source.postMessage('got', event.origin) + } + } + + window.addEventListener('message', handleMessage) + + return () => { + window.removeEventListener('message', handleMessage) + } + }, []) + + return null +} + +export default MessageListener diff --git a/web/app/signin/components/mail-and-password-auth.tsx b/web/app/signin/components/mail-and-password-auth.tsx index 97f8bd1bec..e2e8eee6a8 100644 --- a/web/app/signin/components/mail-and-password-auth.tsx +++ b/web/app/signin/components/mail-and-password-auth.tsx @@ -1,5 +1,5 @@ import Link from 'next/link' -import { useState } from 'react' +import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useRouter, useSearchParams } from 'next/navigation' import { useContext } from 'use-context-selector' @@ -102,6 +102,23 @@ export default function MailAndPasswordAuth({ isInvite, isEmailSetup, allowRegis setIsLoading(false) } } + const autoLogin = async (data) => { + const res = await login({ + url: '/login', + body: data, + }) + if (res.result === 'success') { + localStorage.setItem('console_token', res.data.access_token) + localStorage.setItem('refresh_token', res.data.refresh_token) + router.replace('/apps') + } + } + useEffect(() => { + if(localStorage.getItem('auto-login')) { + autoLogin(JSON.parse(localStorage.getItem('auto-login'))) + localStorage.removeItem('auto-login') + } + }, []) return
{ }}>