import { Injectable, Output, EventEmitter } from "@angular/core";
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from "@angular/router";
import { Observable } from "rxjs/Rx";
import { AuthService } from "./auth.service";
import { StorageService } from "../shared/storage.service";
import { User } from "../shared/user.interface";
@Injectable()
export class AuthGuard implements CanActivate {
@Output() user = new EventEmitter<User>();
@Output() isAuthenticated = new EventEmitter<boolean>();
constructor(private authService: AuthService, private router: Router, private storageService: StorageService ) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
this.authService.getAuthenticatedUser().subscribe(
(response) => {
if (state.url !== '/login' && !response.user) {
this.authService.logout();
return false;
}
this.storageService.write('token', response.token);
this.storageService.write('user', response.user);
}
)
this.user.emit(this.storageService.read<User>('user'));
this.isAuthenticated.emit(true);
return true;
}
}
// Listening Component Seciton
import { Component, OnInit, Input } from '@angular/core';
import { AuthService } from '../auth/auth.service';
import { SiteService } from '../shared/site.service';
import { StorageService } from '../shared/storage.service';
import { User } from '../shared/user.interface';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
@Input() isAuthenticated; //Does not seem to work
@Input() user: User; //Does not seem to work
builder_logo = null;
constructor(private authService: AuthService, private siteService: SiteService,
private storageService: StorageService) { }
ngOnInit() {
this.builder_logo = this.siteService.getBuilderLogo();
}
onLogout() {
this.isAuthenticated = false;
this.authService.logout();
}
}