所以我试图在我的应用程序中的某些路由上实现一个警卫。所以基本上我想向我的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};
}
答案 0 :(得分:0)
好的,所以错误不是来自我的Angular代码......我只需要改变我在api中返回数据的方式,就像这样:
exports.getSession = function(req, res) {
let data = (req.session.passport)? {success: true}: {success: false};
return res.send(data);
}