Auth Auth Guard带有HTTP请求,在Angular 2中不起作用



因此,我正在尝试在应用程序中的某些路线上实现警卫。因此,基本上我想向我的API发送HTTP请求(后端随附Express(,如果存在我的会话,则用户可以访问路线。

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

好,所以错误不是来自我的角度代码...我只需要更改我的API中返回数据的方式,例如:

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

最新更新