ho letto la guida qui: https://angular.io/docs/ts/latest/guide/router.htmlAuthGuard non aspetta che l'autenticazione per terminare prima di controllare utente
sembra abbastanza semplice, tuttavia, non sono sicuro di come utilizzare l'autenticazione di angularfire2 all'interno di una guardia di autenticazione (canActivate
). Quello che ho provato è:
AuthService
import { Injectable } from '@angular/core';
import { AngularFire } from 'angularfire2';
@Injectable()
export class AuthService {
private user: any;
constructor(private af: AngularFire) {
this.af.auth.subscribe(user => {
this.user = user;
})
}
get authenticated(): boolean {
return this.user ? true : false;
}
}
AuthGuard
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService: AuthService) { }
canActivate(): Observable<boolean> | boolean {
if (this.authService.authenticated)
return true;
this.router.navigate(['/login']);
return false;
}
}
Ho anche aggiunto AuthService per il bootstrap fornitori.
Questo tipo di funziona bene, tuttavia, il mio problema principale è quando aggiorno (o inizialmente carico) la pagina su che ha AuthGuard
mi reindirizza sempre alla pagina di accesso poiché lo AuthGuard
non attende la risposta di autenticazione. C'è un modo per attendere che l'autenticazione finisca (anche se è fallita) e quindi verificare se l'utente è autenticato?
Vai a questa risposta, ha implementato guardia autenticazione correttamente http://stackoverflow.com/a/37889258/652850 –
in realtà non risolvere il mio problema con angularfire2. – Andrew