2017-04-18 6 views
0

, also versuche ich eine Wache auf einigen Routen implementieren, die ich in meiner Anwendung habe. Also im Grunde möchte ich eine HTTP-Anfrage an meine API senden (das Backend wird mit Express bedient), und wenn meine Sitzung existiert, kann der Benutzer auf die Route zugreifen.Auth Guard mit HTTP-Anfrage funktioniert nicht in Angular 2

Ich sah viele Beispiele von Leuten, die es taten, und ich habe alle versucht, aber keine funktionierte. Ich habe die Dev-Tools in Chrome überprüft und ich habe keinen Fehler, ich sehe nur, dass die Anfrage im Status "Ausstehend" bleibt.

Also, was mache ich falsch? Es funktioniert perfekt, wenn ich keine HTTP-Anfrage mache.

Mein Auth-guard.service.ts

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

Und das ist mein 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; 
     }); 
} 

Und hier ist meine api Funktion

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

Wenn Sie die Anforderung anstehen, ist es wahrscheinlich bedeutet, dass Sie haben ein Backend-Problem, weil Ihr Angular-Client-Code ausgeführt wird, wenn die Anfrage abgeschlossen ist. –

+0

Sie hatten Recht! Der Fehler kam von meinem Backend, danke! – Manu

Antwort

0

Ok so dass der Fehler von meinem Angular Code nicht gekommen ... Ich hatte gerade die Art und Weise zu ändern, die ich Daten in meinem api zurückgekehrt, wie folgt aus:

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