2017-04-25 6 views
0

私は現在、ActivatedRouteのqueryParamsにいくつか問題があります。私はqueryParams = "?token = 1234"で任意のURLを呼び出すことができるシステムを実現しようとしています。このパラメータが提供されている場合、AppComponentはこのトークンを使用してユーザーを認証します。angular2:queryParams onInit

これは、ユーザーが別のアプリケーション内で認証され、トークンを受け取って角度アプリケーションに転送するためです。

だから、私のAppComponentに、私は次のコードを持っている:

ngOnInit() { 

    this._route.queryParams.subscribe(queryParams => { 
     if (queryParams['token'] != null) { 
      let data; 
      this._staffService.getStaffFromToken(queryParams['token']).subscribe(
       (response: any) => data = response, 
       (error: Error) => console.error(error), 
       () => { 
        if (data.token != null) { 
         this._staffService.setLoggedInStaff(data.staff); 
         this.processLogin(); 
        } else { 
         this._router.navigateByUrl('/login'); 
        } 
       } 
      ); 
     } else { 
      if (this._staffService.getLoggedInStaff() != null) { 
       this.processLogin(); 
      } else { 
       this._router.navigateByUrl('/login'); 
      } 
     } 
    }); 
} 

をそれはSPAですので、私は完全にこれらのparamsに加入することができるという考えを理解し、アプリケーションを使用しながら、paramsが変更される可能性があります。

ただし、次のURLにアクセスすると、http://localhost:4200?token=1234はすぐに/ loginに移動します。何らかの理由で、ngOnInitが呼び出されているときは、すぐにqueryParamを検出しません。私がqueryParamsに500のdebounceTimeを追加すると、正しく動作しますが、私の意見では良い解決策ではありません。

誰かに助言がありますか?私は別のものを試しましたが、私はこの問題を抱えています。

答えて

1

ngOnChanges()にコードを入れて、ng2 Lifecycle

を確認してください。
関連する問題