Ich versuche Angular2 Router Wächter zu verwenden, um den Zugriff auf einige Seiten in meiner App einzuschränken. Ich verwende Firebase-Authentifizierung. Um zu überprüfen, ob ein Benutzer bei Firebase angemeldet ist, muss ich .subscribe()
auf dem FirebaseAuth
Objekt mit einem Rückruf aufrufen. Dies ist der Code für die Wache:Angular2 canActivate() ruft asynchrone Funktion auf
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFireAuth } from "angularfire2/angularfire2";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Rx";
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: AngularFireAuth, private router: Router) {}
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean>|boolean {
this.auth.subscribe((auth) => {
if (auth) {
console.log('authenticated');
return true;
}
console.log('not authenticated');
this.router.navigateByUrl('/login');
return false;
});
}
}
Wenn ein Navigieren Sie zu einer Seite, die die Wache auf sie hat, entweder authenticated
oder not authenticated
auf der Konsole ausgegeben wird (nach einer gewissen Verzögerung auf die Antwort von Feuerbasis zu warten). Die Navigation wird jedoch nie abgeschlossen. Auch wenn ich nicht eingeloggt bin, werde ich auf die Route /login
umgeleitet. Also, das Problem, das ich habe ist return true
zeigt nicht die angeforderte Seite für den Benutzer. Ich nehme an, das ist, weil ich einen Rückruf verwende, aber ich bin nicht in der Lage, herauszufinden, wie es sonst geht. Irgendwelche Gedanken?
importieren Observable wie folgt -> importieren {Observable} von 'rxjs/Observable'; –