且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用AngularFire2做一个路由守卫,等待身份验证检查

更新时间:2023-12-02 15:31:52

这是在Github上发布.

It was answer in this issue post on Github.

auth.service.ts:

auth.service.ts:

@Injectable()
export class AuthService {

  private _user: firebase.User;

  constructor(public afAuth: AngularFireAuth, private db: AngularFireDatabase) {
    afAuth.authState.subscribe(user => this.user = user);  
  }

  get user(): firebase.User {
    return this._user;
  }

  set user(value: firebase.User) {
    this._user = value;
  }

  get authenticated(): boolean {
    return this._user !== null;
  }
}

auth.guard.ts:

auth.guard.ts:

@Injectable()
export class AuthGuard implements CanActivate {

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

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.auth.afAuth.authState
            .take(1)
            .map(authState => !!authState)
            .do(authenticated => {
              if (!authenticated) {
                  this.router.navigate(['login']);
              }
            });
  }
}