diff --git a/apps/browser/src/auth/popup/login.component.ts b/apps/browser/src/auth/popup/login.component.ts index d9b789e4d81..279c006669c 100644 --- a/apps/browser/src/auth/popup/login.component.ts +++ b/apps/browser/src/auth/popup/login.component.ts @@ -26,6 +26,7 @@ import { flagEnabled } from "../../platform/flags"; }) export class LoginComponent extends BaseLoginComponent { showPasswordless = false; + constructor( devicesApiService: DevicesApiServiceAbstraction, appIdService: AppIdService, @@ -66,7 +67,35 @@ export class LoginComponent extends BaseLoginComponent { super.onSuccessfulLogin = async () => { await syncService.fullSync(true); }; + super.successRoute = "/tabs/vault"; + + super.onSuccessfulLoginNavigate = async () => { + // The `redirectUrl` parameter determines the target route after a successful login. + // If provided in the URL's query parameters, the user will be redirected + // to the specified path once they are authenticated. + this.successRoute = this.route.snapshot.queryParams.redirectUrl + ? decodeURIComponent(this.route.snapshot.queryParams.redirectUrl) + : this.successRoute; + + this.router.navigateByUrl(this.successRoute); + }; + + super.onSuccessfulLoginTwoFactorNavigate = async () => { + // The `redirectUrl` parameter determines the target route after a successful login. + // If provided in the URL's query parameters, the user will be redirected + // to the specified path once they are authenticated. + const redirectUrl = this.route.snapshot.queryParams.redirectUrl + ? decodeURIComponent(this.route.snapshot.queryParams.redirectUrl) + : undefined; + + this.router.navigate([this.twoFactorRoute], { + queryParams: { + redirectUrl: redirectUrl, + }, + }); + }; + this.showPasswordless = flagEnabled("showPasswordless"); if (this.showPasswordless) { diff --git a/apps/browser/src/auth/popup/two-factor.component.ts b/apps/browser/src/auth/popup/two-factor.component.ts index c44b22ab314..e74872bfe05 100644 --- a/apps/browser/src/auth/popup/two-factor.component.ts +++ b/apps/browser/src/auth/popup/two-factor.component.ts @@ -32,7 +32,6 @@ const BroadcasterSubscriptionId = "TwoFactorComponent"; }) export class TwoFactorComponent extends BaseTwoFactorComponent { showNewWindowMessage = false; - redirectUrl: string; constructor( authService: AuthService, @@ -75,16 +74,6 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { syncService.fullSync(true); }; - super.onSuccessfulLoginNavigate = async () => { - // The `redirectUrl` parameter determines the target route after a successful login. - // If provided in the URL's query parameters, the user will be redirected - // to the specified path once they are authenticated. - if (this.route.snapshot.queryParams.redirectUrl) { - this.redirectUrl = decodeURIComponent(this.route.snapshot.queryParams.redirectUrl); - this.router.navigateByUrl(this.redirectUrl); - } - }; - super.onSuccessfulLoginTde = async () => { syncService.fullSync(true); }; @@ -94,6 +83,18 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { }; super.successRoute = "/tabs/vault"; + + super.onSuccessfulLoginNavigate = async () => { + // The `redirectUrl` parameter determines the target route after a successful login. + // If provided in the URL's query parameters, the user will be redirected + // to the specified path once they are authenticated. + this.successRoute = this.route.snapshot.queryParams.redirectUrl + ? decodeURIComponent(this.route.snapshot.queryParams.redirectUrl) + : this.successRoute; + + this.router.navigateByUrl(this.successRoute); + }; + // FIXME: Chromium 110 has broken WebAuthn support in extensions via an iframe this.webAuthnNewTab = true; } diff --git a/libs/angular/src/auth/components/login.component.ts b/libs/angular/src/auth/components/login.component.ts index c55d787f79a..41552192a45 100644 --- a/libs/angular/src/auth/components/login.component.ts +++ b/libs/angular/src/auth/components/login.component.ts @@ -40,7 +40,6 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit, showLoginWithDevice: boolean; validatedEmail = false; paramEmailSet = false; - redirectUrl: string; formGroup = this.formBuilder.group({ email: ["", [Validators.required, Validators.email]], @@ -119,14 +118,6 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit, } async submit(showToast = true) { - // The `redirectUrl` parameter determines the target route after a successful login. - // If provided in the URL's query parameters, the user will be redirected - // to the specified path once they are authenticated. - if (this.route.snapshot.queryParams.redirectUrl) { - this.redirectUrl = decodeURIComponent(this.route.snapshot.queryParams.redirectUrl); - this.successRoute = this.redirectUrl; - } - const data = this.formGroup.value; await this.setupCaptcha(); @@ -162,11 +153,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit, if (this.onSuccessfulLoginTwoFactorNavigate != null) { this.onSuccessfulLoginTwoFactorNavigate(); } else { - this.router.navigate([this.twoFactorRoute], { - queryParams: { - redirectUrl: this.redirectUrl, - }, - }); + this.router.navigate([this.twoFactorRoute]); } } else if (response.forcePasswordReset != ForceResetPasswordReason.None) { if (this.onSuccessfulLoginForceResetNavigate != null) { @@ -181,7 +168,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit, if (this.onSuccessfulLoginNavigate != null) { this.onSuccessfulLoginNavigate(); } else { - this.router.navigateByUrl(this.successRoute); + this.router.navigate([this.successRoute]); } } } catch (e) {