From a3e3767108cca43eada1546432d321cdec6400e0 Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Mon, 4 Mar 2024 18:47:21 +0600 Subject: [PATCH] Fix login infinity requests (#4865) Signed-off-by: Denis Bykhov --- .../src/components/Auth.svelte | 4 +++- .../src/components/LoginForm.svelte | 21 ++++++++++--------- server/account/src/index.ts | 13 ++++++++---- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/plugins/login-resources/src/components/Auth.svelte b/plugins/login-resources/src/components/Auth.svelte index 568af8cb8c..8755bf9e83 100644 --- a/plugins/login-resources/src/components/Auth.svelte +++ b/plugins/login-resources/src/components/Auth.svelte @@ -2,7 +2,7 @@ import { LoginInfo, WorkspaceLoginInfo } from '@hcengineering/login' import { setMetadata } from '@hcengineering/platform' import presentation from '@hcengineering/presentation' - import { setMetadataLocalStorage } from '@hcengineering/ui' + import { Loading, setMetadataLocalStorage } from '@hcengineering/ui' import { onMount } from 'svelte' import login from '../plugin' import { afterConfirm, getSessionLoginInfo, navigateToWorkspace } from '../utils' @@ -26,3 +26,5 @@ return (info as WorkspaceLoginInfo).workspace !== undefined } + + diff --git a/plugins/login-resources/src/components/LoginForm.svelte b/plugins/login-resources/src/components/LoginForm.svelte index 84bad6b3cf..60518154ff 100644 --- a/plugins/login-resources/src/components/LoginForm.svelte +++ b/plugins/login-resources/src/components/LoginForm.svelte @@ -22,14 +22,14 @@ Loading, Location, navigate, - setMetadataLocalStorage, - ticker + setMetadataLocalStorage } from '@hcengineering/ui' import { doLogin, getAccount, getWorkspaces, navigateToWorkspace, selectWorkspace } from '../utils' import Form from './Form.svelte' import { LoginInfo } from '@hcengineering/login' + import { onMount } from 'svelte' import { recoveryAction } from '../actions' import login from '../plugin' @@ -53,7 +53,7 @@ async function doLoginNavigate ( result: LoginInfo | undefined, updateStatus: (status: Status) => void - ): Promise { + ): Promise { if (result !== undefined) { setMetadata(presentation.metadata.Token, result.token) setMetadataLocalStorage(login.metadata.LastToken, result.token) @@ -72,7 +72,7 @@ const [loginStatus, result] = await selectWorkspace(workspace) updateStatus(loginStatus) navigateToWorkspace(workspace, result, navigateUrl) - return true + return } } } catch (err: any) { @@ -86,9 +86,7 @@ loc.query = { ...loc.query, navigateUrl } } navigate(loc) - return true } - return false } let status = OK @@ -107,7 +105,7 @@ let loading = true - async function chooseToken (time: number): Promise { + async function chooseToken (): Promise { if (getMetadata(presentation.metadata.Token) == null) { const lastToken = fetchMetadataLocalStorage(login.metadata.LastToken) if (lastToken != null) { @@ -122,13 +120,16 @@ setMetadataLocalStorage(login.metadata.LastToken, null) } } - loading = false - } else { + if (loading) { + loading = false + } + } else if (loading) { loading = false } + setTimeout(chooseToken, 1000) } - $: chooseToken($ticker) + onMount(() => chooseToken()) {#if loading} diff --git a/server/account/src/index.ts b/server/account/src/index.ts index 160d43add0..dc90d1308e 100644 --- a/server/account/src/index.ts +++ b/server/account/src/index.ts @@ -237,7 +237,7 @@ async function getAccountInfo (db: Db, email: string, password: string): Promise return toAccountInfo(account) } -async function getAccountInfoByToken (db: Db, productId: string, token: string): Promise { +async function getAccountInfoByToken (db: Db, productId: string, token: string): Promise { let email: string = '' try { email = decodeToken(token)?.email @@ -248,9 +248,14 @@ async function getAccountInfoByToken (db: Db, productId: string, token: string): if (account === null) { throw new PlatformError(new Status(Severity.ERROR, platform.status.AccountNotFound, { account: email })) } - const res = toAccountInfo(account) - res.confirmed = res.confirmed ?? true - return res + const info = toAccountInfo(account) + const result = { + endpoint: getEndpoint(), + email, + confirmed: info.confirmed ?? true, + token: generateToken(email, getWorkspaceId('', productId), getExtra(info)) + } + return result } /**