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