import {Injectable} from '@angular/core'; import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; import {Observable} from 'rxjs/Rx'; import {Http} from '@angular/http'; import {AuthService} from '../services/auth.service'; @Injectable() export class LoginRouteGuard implements CanActivate { constructor (private router: Router, private http: Http) {} canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable|boolean { let token = AuthService.getAuthToken(); if (token) { return this.http.get(`/auth/verify?token=${token}`).map((res) => { let isLoggedIn: boolean = res.ok; if (isLoggedIn) { this.router.navigate(['dashboard']); } return !isLoggedIn; }) .catch((res) => { return Observable.of(true); }); } return true; } }