0
現在ログインしているユーザーから、DataServiceからロードされたデータをカスタマイズしようとしています。 AuthGuardがInboxComponentが サービスがAngular2とFirebaseで開始される前にAuthGuardからサービスを設定しました
- : 私の目標は、ということです
ただし、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] }
アプリケーションモジュールは
@NgModule({
declarations: [
InboxComponent
],
imports: [
EmailsModule
],
providers: [
AuthService,
AuthGuard
],
bootstrap: [AppComponent]
})
export class AppModule { }
「AuthService」はシングルトンですか?どこに*提供していますか? – Sasxa
上記の私の質問をModule Importコードで編集しました。私はアプリケーションモジュールとInboxComponentのAuthGuardを、別々のモジュール、つまり私がApp ModuleにインポートするEmailsModuleにインポートします。 – user3642173
'this.authService.setUser(authState);は動作していますか?この行を 'this.authService.user = authState;'に置き換えるとどうなりますか? – Sasxa