From 19e4e8fdb43d508ff77c7e8364cdf439bbbece32 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 3 Jul 2024 12:18:06 +0200 Subject: [PATCH] Allow updating email --- packages/backend-core/src/users/db.ts | 4 ++-- packages/backend-core/src/users/test/db.spec.ts | 17 +++++++++++++++++ packages/types/src/sdk/user.ts | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/backend-core/src/users/db.ts b/packages/backend-core/src/users/db.ts index 37547573bd..b1c7a25c8f 100644 --- a/packages/backend-core/src/users/db.ts +++ b/packages/backend-core/src/users/db.ts @@ -232,8 +232,8 @@ export class UserDB { // try to get existing user from db try { dbUser = (await db.get(_id)) as User - if (email && dbUser.email !== email) { - throw "Email address cannot be changed" + if (email && dbUser.email !== email && !opts.allowChangingEmail) { + throw new Error("Email address cannot be changed") } email = dbUser.email } catch (e: any) { diff --git a/packages/backend-core/src/users/test/db.spec.ts b/packages/backend-core/src/users/test/db.spec.ts index 736422f653..0a103e1064 100644 --- a/packages/backend-core/src/users/test/db.spec.ts +++ b/packages/backend-core/src/users/test/db.spec.ts @@ -131,6 +131,23 @@ describe("UserDB", () => { ).rejects.toThrow("Email address cannot be changed") }) }) + + it("email can be updated if specified", async () => { + await config.doInTenant(async () => { + user.email = generator.email({}) + + await db.save(user, { allowChangingEmail: true }) + + const persistedUser = await db.getUserByEmail(user.email) + expect(persistedUser).toEqual( + expect.objectContaining({ + _id: user._id, + email: user.email, + lastName: user.lastName, + }) + ) + }) + }) }) }) }) diff --git a/packages/types/src/sdk/user.ts b/packages/types/src/sdk/user.ts index 3f6f69d2d1..c0e2f80297 100644 --- a/packages/types/src/sdk/user.ts +++ b/packages/types/src/sdk/user.ts @@ -3,4 +3,5 @@ export interface SaveUserOpts { requirePassword?: boolean currentUserId?: string skipPasswordValidation?: boolean + allowChangingEmail?: boolean }