0
我試圖從當前登錄的用戶獲取用戶標識以自定義從我的DataService加載的數據。 我的目標是:在使用Angular2和Firebase啓動服務之前設置從AuthGuard服務的值
- 的AuthGuard應InboxComponent之前調用加載
- 這AuthGuard應設置用戶變量在AuthService
- 我應該再能使用DataService中的authService.user
但是,console.log(this.authService.user)
收益率未定義,但AuthGuard中的console.log(authState)
正確記錄用戶信息。
任何可能出錯的線索?
驗證服務
export class AuthService {
public user: any;
constructor(private af: AngularFire, public auth$: FirebaseAuth) {
console.log("Auth service state:", this.authState);
}
AuthGuard
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(): Observable<boolean> {
return this.authService.auth$
.take(1)
.map(authState => {
console.log(authState)
this.authService.setUser(authState);
return !!authState })
.do(authenticated => {
if (!authenticated) {
this.router.navigate(['/error']);
}
});
}
}
的DataService
export class DataService {
private userPath: string;
constructor(private af: AngularFire, private authService: AuthService) {
console.log(this.authService.user);
}
路由器
const routes: Routes = [
{ path: 'inbox', component: InboxComponent, canActivate: [AuthGuard] }
APP模塊
@NgModule({
declarations: [
InboxComponent
],
imports: [
EmailsModule
],
providers: [
AuthService,
AuthGuard
],
bootstrap: [AppComponent]
})
export class AppModule { }
AuthService是單身嗎?你在哪裏提供*它? – Sasxa
我用模塊導入代碼編輯了我的問題。我在App Module中導入AuthGuard,在另一個Module中導入InboxComponent,我導入App Module – user3642173
的EmailsModule是'this.authService.setUser(authState);'工作嗎?如果將此行替換爲'this.authService.user = authState;'會發生什麼? – Sasxa