Terakhir yang perlu kita implementasikan adalah, menjaga route. Karena user yang tidak valid, dapat masuk melalui URL.
Buat file baru auth/auth.guard.ts,
import { Injectable } from "@angular/core";
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from "@angular/router";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
import { AuthService } from "./auth.service";
@Injectable({providedIn: 'root'})
export class AuthGuardService implements CanActivate{
constructor(private authSrv : AuthService, private router : Router){}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
return this.authSrv.user.pipe(map(user=>{
const isAuth = !!user;
if (isAuth){
return true;
}
return this.router.createUrlTree(['/auth']);
}));
}
}
Kemudian buka file app-routing.module.ts, tambahkan canActivate pada recipes route.
import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { AuthComponent } from "./auth/auth.component";
import { RecipeDetailComponent } from "./recipes/recipe-detail/recipe-detail.component";
import { RecipeEditComponent } from "./recipes/recipe-edit/recipe-edit.component";
import { RecipeHomeComponent } from "./recipes/recipe-home/recipe-home.component";
import { RecipesComponent } from "./recipes/recipes.component";
import { ShoppingListComponent } from "./shopping-list/shopping-list.component";
import { RecipesResolverService } from "./recipes/recipes-resolver.service";
import { AuthGuardService } from "./auth/auth-guard.service";
const appRoutes: Routes = [
{path: '', redirectTo:'/recipes', pathMatch: 'full'},
//tambahkan canActivate
{path: 'recipes', component: RecipesComponent, canActivate: [AuthGuardService] , children:[
{path: '', component: RecipeHomeComponent},
{path: 'new', component: RecipeEditComponent},
{path: ':id', component: RecipeDetailComponent, resolve: [RecipesResolverService]},
{path: ':id/edit', component: RecipeEditComponent, resolve: [RecipesResolverService]}
]},
{path: 'shopping-list', component: ShoppingListComponent},
{path: 'auth', component: AuthComponent}
];
@NgModule({
imports: [RouterModule.forRoot(appRoutes)],
exports: [RouterModule]
})
export class AppRoutingModule{
}
Sampai disini penerapan authentication sudah selesai. Modul selanjutnya kita akan mempelajari penggunaan Dinamyc Component.