From b71fe291d1f7e30e0817b52de5c3d5f3e16464b7 Mon Sep 17 00:00:00 2001 From: forehalo Date: Mon, 24 Feb 2025 04:44:43 +0000 Subject: [PATCH] fix(core): version control session (#10384) --- .../server/src/core/auth/controller.ts | 1 + .../core/src/components/sign-in/sign-in.tsx | 5 ++- .../src/modules/cloud/entities/session.ts | 41 ++++++++++++------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/backend/server/src/core/auth/controller.ts b/packages/backend/server/src/core/auth/controller.ts index 3f483274d..34a4693c7 100644 --- a/packages/backend/server/src/core/auth/controller.ts +++ b/packages/backend/server/src/core/auth/controller.ts @@ -299,6 +299,7 @@ export class AuthController { res.send({ id: user.id }); } + @UseNamedGuard('version') @Throttle('default', { limit: 1200 }) @Public() @Get('/session') diff --git a/packages/frontend/core/src/components/sign-in/sign-in.tsx b/packages/frontend/core/src/components/sign-in/sign-in.tsx index ec80f1a1c..9a9f33e99 100644 --- a/packages/frontend/core/src/components/sign-in/sign-in.tsx +++ b/packages/frontend/core/src/components/sign-in/sign-in.tsx @@ -134,12 +134,13 @@ export const SignInStep = ({ }); } } - } catch (err) { + } catch (err: any) { console.error(err); // TODO(@eyhn): better error handling notify.error({ - title: 'Failed to send email. Please try again.', + title: 'Failed to sign in', + message: err.message, }); } diff --git a/packages/frontend/core/src/modules/cloud/entities/session.ts b/packages/frontend/core/src/modules/cloud/entities/session.ts index ae5e50072..701e67b6f 100644 --- a/packages/frontend/core/src/modules/cloud/entities/session.ts +++ b/packages/frontend/core/src/modules/cloud/entities/session.ts @@ -12,6 +12,7 @@ import { isEqual } from 'lodash-es'; import { EMPTY, mergeMap } from 'rxjs'; import { validateAndReduceImage } from '../../../utils/reduce-image'; +import { BackendError } from '../error'; import type { AccountProfile, AuthStore } from '../stores/auth'; export interface AuthSessionInfo { @@ -94,22 +95,32 @@ export class AuthSession extends Entity { ); private async getSession(): Promise { - const session = await this.store.fetchSession(); + try { + const session = await this.store.fetchSession(); - if (session?.user) { - const account = { - id: session.user.id, - email: session.user.email, - label: session.user.name, - avatar: session.user.avatarUrl, - info: session.user, - }; - const result = { - account, - }; - return result; - } else { - return null; + if (session?.user) { + const account = { + id: session.user.id, + email: session.user.email, + label: session.user.name, + avatar: session.user.avatarUrl, + info: session.user, + }; + const result = { + account, + }; + return result; + } else { + return null; + } + } catch (e) { + if ( + e instanceof BackendError && + e.originError.name === 'UNSUPPORTED_CLIENT_VERSION' + ) { + return null; + } + throw e; } }