具有http请求的Auth防护不在Angular 2中工作

时间:2017-04-18 13:14:22

标签: angular authentication typescript

所以我试图在我的应用程序中的某些路由上实现一个警卫。所以基本上我想向我的api发送一个http请求(后端是快递服务),如果我的会话存在,用户可以访问该路由。

我看到很多人都这样做的例子,我尝试了所有这些,但都没有用。我检查了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};
}

1 个答案:

答案 0 :(得分:0)

好的,所以错误不是来自我的Angular代码......我只需要改变我在api中返回数据的方式,就像这样:

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