Угловой 2 RC6 с использованием AngularFire2. Моя аутентификация работает, что вызывает перенаправление на охраняемый маршрут («/ feed»). Когда метод canActivate в AuthGuard срабатывает, аутентификация всегда равна нулю. Кажется, что аутентификация происходит до того, как охранник когда-либо строится, поэтому подписка в охраннике ничего не делает.Аутентификация AngularFire2 с CanActivate не работает
login.ts (аутентификация работает и перенаправляет на 'корм')
constructor(public af: AngularFire, private router: Router) {
this.af.auth.subscribe(auth => console.log(auth));
}
login() {
this.af.auth.login({
provider: AuthProviders.Facebook,
method: AuthMethods.Popup,
}).then((x: FirebaseAuthState) => {
console.log(x);
this.router.navigate(['/feed']);
}).catch(x => console.log(x));
}
feed.routes.ts
export const feedRoutes: Routes = [
{
path: '',
component: FeedComponent,
canActivate: [AuthGuard]
}
];
Auth-guard.service.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot } from '@angular/router';
import { AngularFire, AngularFireAuth, FirebaseAuthState } from 'angularfire2';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
auth: FirebaseAuthState;
constructor(private af: AngularFire, private router: Router) {
console.log('auth guard constructed');
this.af.auth.subscribe(authState => console.log(authState));
this.af.auth.subscribe(x => this.auth = x);
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
console.log('can activate ' + this.auth)
if (this.auth == null){
// this part always fires
console.log('no auth!')
this.router.navigate(['/login']);
return false;
}
console.log('authenticated');
return true;
}
}
Вот что напечатано на пульте:
Object {auth: W, uid: "xYFs8kMDpKdYKxDw4AL21FtnSWn1", provider: 2, facebook: Of}
auth-guard.service.ts:13 auth guard constructed
auth-guard.service.ts:19 can activate undefined
auth-guard.service.ts:21 no auth!
Обратите внимание, что действия в .subscribe никогда не происходят.
Я бы внимательно посмотрел на порядок вызовов 'console.log' у вас в логине и охраннике. Если первое первое, охранник получит излучаемое auth-состояние после маршрутизации, что объяснит поведение, которое вы видите. – cartant
Извините, что я забыл вывести свой вывод на консоль, я добавил его к вопросу –