Auth Guard in Angular 7 Login Example
In this example, I have taken a simple login example where a user may open dashboard after login only after successful login username will be stored into localstorage which is authentication for auth guard.
Take the Following steps :
- create two components login and dashboard.(ng g c /login/login, ng g c /dashboard/dashboard)
- Create a service “MyService” (ng g s MyService)
- Create a authguard(ng g g authguard)
Add Following code into service
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class MyServiceService { constructor() { } checkusernameandpassword(uname: string, pwd : string) { if(uname == "admin" && pwd =="admin123"){ localStorage.setItem('username',"admin"); return true; } else{ return false; } } }
Add Following code into authguard
import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, Router } from '@angular/router'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate { constructor(private routes : Router){} canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { if(localStorage.getItem('username')!= null){ return true; } else { this.routes.navigate(['/login']); return false; } } }
Add Following code into login
import { Component, OnInit } from '@angular/core'; import { RouterModule , Router } from '@angular/router'; import { MyServiceService } from 'src/app/my-service.service'; @Component({ selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.css'], providers: [MyServiceService] }) export class LoginComponent implements OnInit { constructor(private routes : Router, private service : MyServiceService) { } msg=""; ngOnInit() { } check(uname: string, p : string) { var output = this.service.checkusernameandpassword(uname, p); if(output == true) { this.routes.navigate(['/dashboard']); } else{ this.msg ='Invalid username or password'; } } }
login.component.html
<p> login works! </p> <input type="text" #u1 /><br> <input type="password" #p2 /><br/> <button (click)="check(u1.value, p2.value)">Login</button> <br/> <span>{{ msg }}</span>
Write Following code into app.module.ts
import { AuthGuard } from './auth.guard'; import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DashboardComponent } from './dashboard/dashboard/dashboard.component'; import { LoginComponent } from './Login/login/login.component'; import { RouterModule, Routes } from '@angular/router'; const appRoutes: Routes = [ {path: 'login', component: LoginComponent}, {path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard] }, { path: "**", redirectTo: "/" } ]; @NgModule({ declarations: [ AppComponent, DashboardComponent, LoginComponent ], imports: [ BrowserModule, RouterModule.forRoot(appRoutes) ], providers: [AuthGuard], bootstrap: [AppComponent] }) export class AppModule { }
hello, plz work for more than before
divya