From 26a217cd50b75ceb7f7dc66245e88510fa64a19a Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Tue, 15 Oct 2024 08:25:49 +0200 Subject: [PATCH] Add a guard to deny access for some routes. --- frontend/src/app/app.routes.ts | 7 +++++-- .../core/guard/already-authenticated.guard.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 frontend/src/app/core/guard/already-authenticated.guard.ts diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index 631dc29..40eb449 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,13 +1,16 @@ import { Routes } from '@angular/router'; +import { alreadyAuthenticatedGuard } from './core/guard/already-authenticated.guard'; export const routes: Routes = [ { path: 'login', - loadComponent: () => import('./pages/login/login.component').then(module => module.LoginComponent) + loadComponent: () => import('./pages/login/login.component').then(module => module.LoginComponent), + canActivate: [alreadyAuthenticatedGuard] }, { path: 'signin', - loadComponent: () => import('./pages/signin/signin.component').then(module => module.SigninComponent) + loadComponent: () => import('./pages/signin/signin.component').then(module => module.SigninComponent), + canActivate: [alreadyAuthenticatedGuard] }, { path: 'disconnect', diff --git a/frontend/src/app/core/guard/already-authenticated.guard.ts b/frontend/src/app/core/guard/already-authenticated.guard.ts new file mode 100644 index 0000000..c2a589d --- /dev/null +++ b/frontend/src/app/core/guard/already-authenticated.guard.ts @@ -0,0 +1,18 @@ +import { inject } from "@angular/core"; +import { CanActivateFn, Router } from "@angular/router"; +import { AuthenticationService } from "../service/authentication.service"; +import { MatSnackBar } from "@angular/material/snack-bar"; + +export const alreadyAuthenticatedGuard: CanActivateFn = () => { + const authenticationService = inject(AuthenticationService); + const router = inject(Router); + const snackBar = inject(MatSnackBar); + + if (authenticationService.isAuthenticated()) { + router.navigate(['/home']); + snackBar.open($localize`You can't access to this page because you are already authenticated.`, $localize`Close`, { duration: 5000 }); + return false; + } else { + return true; + } +} \ No newline at end of file