Uygulamamdaki bazı sayfalara erişimi kısıtlamak için Angular2 yönlendirici korumalarını kullanmaya çalışıyorum. Firebase Kimlik Doğrulaması kullanıyorum. Bir kullanıcının Firebase ile giriş yapıp yapmadığını kontrol etmek için, geri arama ile FirebaseAuth
nesnesinde .subscribe()
nesnesini aramalıyım. Bu bekçi için kodudur:, üzerinde ya authenticated
veya not authenticated
bekçi olan bir sayfaya bir gezinme konsola yazdırılırAngular2 canActivate() async işlevini çağırıyor
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;
});
}
}
(Firebase yanıt beklerken bazı gecikmeden sonra). Ancak navigasyon hiçbir zaman tamamlanmamıştır. Ayrıca, giriş yapmadıysam /login
rotasına yönlendirilirim. Yani, sahip olduğum sorun return true
kullanıcı için istenen sayfayı görüntülemiyor. Bunun bir geri çağırma kullanıyorum çünkü varsayıyorum, ama aksi takdirde nasıl yapacağını anlayamıyorum. Düşüncesi olan var mı?
import Gözlemlenebilir şekilde -> import {Gözlemlenebilir} 'den Rxjs/Gözlemlenebilir'; –