http请求在Angular 2中不起作用的身份验证保护

http请求在Angular 2中不起作用的身份验证保护,angular,authentication,typescript,Angular,Authentication,Typescript,因此,我尝试在应用程序中的某些路由上实现一个防护。因此,基本上我想向我的api发送一个http请求(后端由express提供),如果我的会话存在,用户可以访问该路由 我看到很多人这样做的例子,我都试过了,但没有一个奏效。我在chrome中检查了开发工具,没有错误,我只是看到请求保持在“挂起”状态 那么我做错了什么?如果我不执行http请求,它将非常有效 My auth guard.service.ts canActivate(next: ActivatedRouteSnapshot, stat

因此,我尝试在应用程序中的某些路由上实现一个防护。因此,基本上我想向我的api发送一个http请求(后端由express提供),如果我的会话存在,用户可以访问该路由

我看到很多人这样做的例子,我都试过了,但没有一个奏效。我在chrome中检查了开发工具,没有错误,我只是看到请求保持在“挂起”状态

那么我做错了什么?如果我不执行http请求,它将非常有效

My auth guard.service.ts

canActivate(next:  ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.authService.isAuthenticated();
}
这是我的身份验证服务.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) {
    let data = (req.session.passport)? {success: true}: {success: false};
    return res.send(data);
}

如果您的请求挂起,这可能意味着您有一些后端问题,因为您的Angular客户端代码会在请求完成时执行。您是对的!错误来自我的后端,谢谢!
exports.getSession = function(req, res) {
    let data = (req.session.passport)? {success: true}: {success: false};
    return res.send(data);
}