2017-04-18 160 views
0

所以我试图在我的应用程序的某些路线上实施警卫。所以基本上我想发送一个http请求到我的api(后端用express),如果我的会话存在,用户可以访问路由。Auth警卫与http请求不适用于Angular 2

我看到很多人在做它的例子,我尝试了所有的人,但都没有工作。我在chrome中检查了开发工具,并且没有错误,我只是看到请求处于“正在等待”状态。

那么我做错了什么?如果我不做一个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

如果有请求挂起,这可能意味着,你有一些后端问题,因为你的Angular客户端代码在请求结束时被执行。 –

+0

你是对的!错误来自我的后端,谢谢! – Manu

回答

0

确定这样的错误不是来自我的角码......我不得不改变我在API返回数据的方式,像这样:

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