2017-04-18 13 views
0

私は自分のアプリケーションにあるいくつかのルートでガードを実装しようとしています。だから基本的に私のapi(バックエンドは速達で提供されています)にhttpリクエストを送信したい、私のセッションが存在する場合、ユーザーはルートにアクセスすることができます。http要求のあるAuthガードがAngular 2で動作しない

私はそれをやっている人の例をたくさん見ましたが、私はそれらのすべてを試しましたが、何も働いていませんでした。私はクロムの開発ツールをチェックしたところ、エラーはなく、要求が "保留中"の状態にとどまっていることがわかりました。

どうしたのですか?私がhttp要求をしなければ、それは完全に動作します。

私のauth-guard.service.ts

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    return this.authService.isAuthenticated(); 
} 

そして、これはここで私のauth.service.ts

public isAuthenticated() : Observable<boolean> | boolean { 
    let router: Router = this.router; 
    let obs; 

    try { 
     obs = this.http.get('/api/session') 
      .map(result => result.json()) 
      .map(resultJson => (resultJson && resultJson.success)); 

    } catch (err) { 
     obs = Observable.of(false); 
    } 

    return obs 
     .map(success => { 
      // navigate to login page 
      if (!success) 
       router.navigate(['/login']); 

      return success; 
     }); 
} 

あるとは私のAPI関数である

exports.getSession = function(req, res) { 
    return (req.session.passport)? {success: true}: {success: false}; 
} 
+0

あなたが保留中の要求を持っている場合、それはおそらく意味、そのエラーが私の角度コードから来ていなかったので...私はちょうど私がこのように、私のAPIでデータを返された方法を変更する必要がありました[OK]を要求が終了するとAngularクライアントコードが実行されるため、バックエンドの問題が発生します。 –

+0

あなたは正しかった!エラーは私のバックエンドから来た、ありがとう! – Manu

答えて

0
exports.getSession = function(req, res) { 
    let data = (req.session.passport)? {success: true}: {success: false}; 
    return res.send(data); 
} 
関連する問題