2016-12-15 10 views
0

現在ログインしているユーザーから、DataServiceからロードされたデータをカスタマイズしようとしています。 AuthGuardがInboxComponentが サービスがAngular2とFirebaseで開始される前にAuthGuardからサービスを設定しました

  • をロードする前にこのAuthGuardのAuthService
  • ユーザー変数を設定する必要があり、私はそれからのことができるようにすべきであると呼ばれるべき

    1. : 私の目標は、ということです

    ただし、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 { } 
    
  • +0

    「AuthService」はシングルトンですか?どこに*提供していますか? – Sasxa

    +0

    上記の私の質問をModule Importコードで編集しました。私はアプリケーションモジュールとInboxComponentのAuthGuardを、別々のモジュール、つまり私がApp ModuleにインポートするEmailsModuleにインポートします。 – user3642173

    +0

    'this.authService.setUser(authState);は動作していますか?この行を 'this.authService.user = authState;'に置き換えるとどうなりますか? – Sasxa

    答えて

    0

    私は最終的にこれを解決しました。私のapp.component.tsファイルでDataServiceを呼び出して、ナビゲーションにデータを取得しました。これは、ルータモジュールの外部にロードされ、AuthServiceが呼び出される前に呼び出されます。その結果、AuthGuardが呼び出される前にDataServiceが発生しました。

    関連する問題