oktatas:web:angular:angular_utvonalak_vedelme
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változat | |||
oktatas:web:angular:angular_utvonalak_vedelme [2023/02/15 13:22] – [Guard] admin | oktatas:web:angular:angular_utvonalak_vedelme [2025/03/02 17:01] (aktuális) – admin | ||
---|---|---|---|
Sor 4: | Sor 4: | ||
* **Szerző: | * **Szerző: | ||
- | * Copyright (c) Sallai András, 2023 | + | * Copyright (c) 2024, Sallai András |
* Licenc: [[https:// | * Licenc: [[https:// | ||
* Web: https:// | * Web: https:// | ||
- | ===== Guard ===== | + | ===== Fő komponens ===== |
+ | |||
+ | <code javascript src/ | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | ===== AuthService ===== | ||
+ | |||
+ | Az AuthService osztályban szükségünk lesz egy isLoggedIn() metódusra. | ||
+ | |||
+ | <code javascript src/ | ||
+ | import { Injectable } from ' | ||
+ | |||
+ | @Injectable({ | ||
+ | providedIn: ' | ||
+ | }) | ||
+ | export class AuthService { | ||
+ | |||
+ | constructor() { } | ||
+ | |||
+ | isLoggedIn() { | ||
+ | return true; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== AuthGuard | ||
Az egyes útvonalak védelméről a guard nevű eszközzel tudunk gondoskodni. | Az egyes útvonalak védelméről a guard nevű eszközzel tudunk gondoskodni. | ||
A shared nevű könyvtárban fogom létrehozni (nem kötelező itt létrehozni): | A shared nevű könyvtárban fogom létrehozni (nem kötelező itt létrehozni): | ||
- | ng g guard shared/auth | + | ng generate |
+ | |||
+ | Rövidítéssel: | ||
+ | ng g g shared/ | ||
Létrehozáskor rákérdez milyen típusokat szeretnénk: | Létrehozáskor rákérdez milyen típusokat szeretnénk: | ||
Sor 26: | Sor 56: | ||
A szóközzel jelölhetek ki, a le és fel billentyűvel választhatok, | A szóközzel jelölhetek ki, a le és fel billentyűvel választhatok, | ||
- | Szükségünk van egy metódusra, ami megmondja, hogy azonosítva vagyunk-e. | ||
+ | <code javascript src/ | ||
+ | import { inject } from ' | ||
+ | import { CanActivateFn } from ' | ||
+ | import { AuthService } from ' | ||
+ | |||
+ | export const authGuard: CanActivateFn = (route, state) => { | ||
+ | | ||
+ | const authService = inject(AuthService); | ||
+ | |||
+ | if (!authService.isLoggedIn()) { | ||
+ | return false; | ||
+ | } | ||
+ | | ||
+ | return true; | ||
+ | }; | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Komponens ===== | ||
+ | |||
+ | Legyen egy védett komponens Valami névű. | ||
+ | |||
+ | ng g c valami | ||
+ | |||
+ | |||
+ | ===== Routing ===== | ||
+ | |||
+ | <code javascript src/ | ||
+ | import { Routes } from ' | ||
+ | import { ValamiComponent } from ' | ||
+ | import { authGuard } from ' | ||
+ | |||
+ | export const routes: Routes = [ | ||
+ | { | ||
+ | path: ' | ||
+ | component: ValamiComponent, | ||
+ | canActivate: | ||
+ | }, | ||
+ | ]; | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Teszt ===== | ||
+ | |||
+ | A böngészőbe írjuk be: | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | Próbáljuk meg true és false értékkel is az isLoggedIn() függvényben. | ||
- | <code javascript auth.service.ts> | + | <code javascript |
+ | //... | ||
isLoggedIn() { | isLoggedIn() { | ||
- | if (localStorage.getItem(' | ||
- | return false; | ||
- | } | ||
return true; | return true; | ||
+ | |||
} | } | ||
</ | </ | ||
+ | ===== Az AuthService javítása ===== | ||
- | <code javascript auth.guard.ts> | + | Javítsuk az isLoggedIn() függvényt: |
- | import { Injectable } from ' | + | |
- | import { ActivatedRouteSnapshot, | + | |
- | import { Router, RouterStateSnapshot, | + | |
- | import | + | <code javascript> |
- | import { AuthService | + | isLoggedIn() |
+ | return !!localStorage.getItem('login_token'); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Teljes kód ===== | ||
+ | |||
+ | Teljes kód: | ||
+ | |||
+ | <code javascript src/ | ||
+ | import { Injectable | ||
@Injectable({ | @Injectable({ | ||
providedIn: ' | providedIn: ' | ||
}) | }) | ||
- | export class AuthGuard implements CanActivate | + | export class AuthService |
- | constructor( | + | constructor() { } |
- | private auth: AuthService, | + | |
- | private router: Router | + | |
- | | + | |
- | canActivate() | + | |
- | route: ActivatedRouteSnapshot, | + | |
- | state: RouterStateSnapshot): | + | |
- | + | | |
- | if( this.auth.isLoggedIn() ) { | + | if(user === ' |
+ | const authToken = ' | ||
+ | localStorage.setItem(' | ||
return true; | return true; | ||
+ | }else { | ||
+ | return false; | ||
} | } | ||
- | this.router.navigate([' | ||
- | return false; | ||
} | } | ||
- | | ||
- | } | ||
- | </ | + | logout() { |
+ | localStorage.removeItem(' | ||
+ | } | ||
+ | isLoggedIn() { | ||
+ | return !!localStorage.getItem(' | ||
+ | } | ||
+ | } | ||
- | <code javascript app-routing.module.ts> | ||
- | const routes: Routes = [ | ||
- | { | ||
- | path: ' | ||
- | component: EmployeeComponent, | ||
- | canActivate: | ||
- | }, | ||
- | {path: ' | ||
- | ]; | ||
</ | </ | ||
oktatas/web/angular/angular_utvonalak_vedelme.1676463759.txt.gz · Utolsó módosítás: 2023/02/15 13:22 szerkesztette: admin