Skip to content

Instantly share code, notes, and snippets.

@Zyzle
Created July 21, 2016 10:32
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Zyzle/7fcdf92b23bd1ba1efad2e3418cd71bf to your computer and use it in GitHub Desktop.
Save Zyzle/7fcdf92b23bd1ba1efad2e3418cd71bf to your computer and use it in GitHub Desktop.
Angular 2 Firebase auth guard
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { FirebaseAuth, FirebaseAuthState } from 'angularfire2';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: FirebaseAuth, private router: Router) { }
canActivate(): Observable<boolean> {
return this.auth.take(1)
.map((authState: FirebaseAuthState) => !!authState)
.do(authenticated => {
if (!authenticated) {
this.router.navigate(['/login']);
}
});
}
}
@vstymkovskyi
Copy link

vstymkovskyi commented Jul 13, 2017

it doesn't work

here is the work code

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';

import { AngularFireAuth } from 'angularfire2/auth';
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/take';
import 'rxjs/add/operator/do';

@Injectable()
export class AuthGuard implements CanActivate {

constructor(
    private router: Router,
    private auth: AngularFireAuth
) { }

canActivate(): Observable<boolean> {
    return this.auth.authState
        .take(1)
        .map(authState => !!authState)
        .do(auth => !auth ? this.router.navigate(['/login']) : true);
}

@markbell2410
Copy link

Or for RXJS 6+

return this.auth.authState.pipe(
      take(1),
      map(authState => !!authState),
      tap(auth => !auth ? this.router.navigateByUrl('/login') : true)
  )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment