This commit is contained in:
Bastian Wagner
2026-06-19 08:59:30 +02:00
parent f86416e8bc
commit e543a2f4a1
5 changed files with 38 additions and 9 deletions

View File

@@ -1,5 +1,6 @@
import { Routes } from '@angular/router';
import { authGuard } from './auth/auth.guard';
import { unauthGuard } from './auth/unauth.guard';
import { LoginComponent } from './auth/login/login.component';
import { RegisterComponent } from './auth/register/register.component';
import { AccountComponent } from './account/account.component';
@@ -10,10 +11,10 @@ import { TemplatesComponent } from './templates/templates.component';
import { TemplateDetailComponent } from './templates/template-detail/template-detail.component';
export const routes: Routes = [
{ path: '', pathMatch: 'full', redirectTo: 'login' },
{ path: 'login', component: LoginComponent },
{ path: 'register', component: RegisterComponent },
{ path: 'verify-email', component: VerifyEmailComponent },
{ path: '', pathMatch: 'full', redirectTo: 'lists' },
{ path: 'login', component: LoginComponent, canActivate: [unauthGuard] },
{ path: 'register', component: RegisterComponent, canActivate: [unauthGuard] },
{ path: 'verify-email', component: VerifyEmailComponent, canActivate: [unauthGuard] },
{
path: 'auth',
children: [{ path: 'verify-email', component: VerifyEmailComponent }],

View File

@@ -1,4 +1,4 @@
import { Component, inject } from '@angular/core';
import { Component, inject, OnInit } from '@angular/core';
import { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
import { Router, RouterLink } from '@angular/router';
import { finalize } from 'rxjs';
@@ -29,7 +29,7 @@ import { OnboardingService } from '../../onboarding/onboarding.service';
templateUrl: './login.component.html',
styleUrl: '../auth-page.scss',
})
export class LoginComponent {
export class LoginComponent implements OnInit {
private readonly auth = inject(AuthService);
private readonly formBuilder = inject(NonNullableFormBuilder);
private readonly router = inject(Router);
@@ -41,6 +41,12 @@ export class LoginComponent {
password: ['', [Validators.required, Validators.minLength(8)]],
});
protected loading = false;
ngOnInit(): void {
if (this.auth.isAuthenticated()) {
void this.router.navigateByUrl('/lists');
}
}
protected resendingVerification = false;
protected hidePassword = true;

View File

@@ -1,4 +1,4 @@
import { Component, inject } from '@angular/core';
import { Component, inject, OnInit } from '@angular/core';
import { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
import { Router, RouterLink } from '@angular/router';
import { finalize } from 'rxjs';
@@ -28,7 +28,7 @@ import { getAuthErrorMessage } from '../error-message';
templateUrl: './register.component.html',
styleUrl: '../auth-page.scss',
})
export class RegisterComponent {
export class RegisterComponent implements OnInit {
private readonly auth = inject(AuthService);
private readonly formBuilder = inject(NonNullableFormBuilder);
private readonly router = inject(Router);
@@ -42,6 +42,12 @@ export class RegisterComponent {
protected loading = false;
protected hidePassword = true;
ngOnInit(): void {
if (this.auth.isAuthenticated()) {
void this.router.navigateByUrl('/lists');
}
}
submit(): void {
if (this.form.invalid) {
this.form.markAllAsTouched();

View File

@@ -0,0 +1,10 @@
import { inject } from '@angular/core';
import { CanActivateFn, Router } from '@angular/router';
import { AuthService } from './auth.service';
export const unauthGuard: CanActivateFn = () => {
const auth = inject(AuthService);
const router = inject(Router);
return !auth.isAuthenticated() ? true : router.parseUrl('/lists');
};

View File

@@ -1,5 +1,5 @@
import { Component, OnInit, inject, signal } from '@angular/core';
import { ActivatedRoute, RouterLink } from '@angular/router';
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatIconModule } from '@angular/material/icon';
@@ -24,12 +24,18 @@ type VerificationState = 'loading' | 'success' | 'error' | 'missing-token';
export class VerifyEmailComponent implements OnInit {
private readonly auth = inject(AuthService);
private readonly route = inject(ActivatedRoute);
private readonly router = inject(Router);
protected readonly state = signal<VerificationState>('loading');
protected readonly message = signal('E-Mail wird bestätigt.');
protected readonly email = signal<string | null>(null);
ngOnInit(): void {
if (this.auth.isAuthenticated()) {
void this.router.navigateByUrl('/lists');
return;
}
const token = this.route.snapshot.queryParamMap.get('token');
if (!token) {