Javascript 角度及;RxJS:如何初始化AuthGuard?

Javascript 角度及;RxJS:如何初始化AuthGuard?,javascript,angular,asynchronous,rxjs,angular6,Javascript,Angular,Asynchronous,Rxjs,Angular6,随后,我使用angular auth guard提供了客户端身份验证 特别是我有一个私有loggedIn:BehaviorSubject=newbehaviorsubject(null)变量,我可以在整个应用程序中使用它来了解用户是否登录 但是在上面的代码中,所做的测试很简单(用户和密码不是空的),我想进行服务器身份验证,但我面临一个问题:如何使AuthGuard的canActivate方法等待http.post()返回的异步值?我看到canActivate可以返回一个可观察的,但是我不能让它与

随后,我使用angular auth guard提供了客户端身份验证

特别是我有一个
私有loggedIn:BehaviorSubject=newbehaviorsubject(null)变量,我可以在整个应用程序中使用它来了解用户是否登录


但是在上面的代码中,所做的测试很简单(用户和密码不是空的),我想进行服务器身份验证,但我面临一个问题:如何使AuthGuard的canActivate方法等待http.post()返回的异步值?我看到canActivate可以返回一个可观察的,但是我不能让它与loggedIn变量一起工作。

您回答了自己的问题。canActivate方法的返回值可以是
可观察的
承诺
布尔值
。你的loggedIn财产不属于这些。相反,您应该让canActivate调用一个服务,该服务将向您的后端发出http请求,并返回一个可观察值,然后您可以将响应映射为布尔值。

Hi&欢迎使用SO!请阅读并通读,尤其是做你的研究,了解有关SO的相关主题,并尝试一下。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一篇你的尝试,并明确指出你的困境。皮普斯很乐意帮忙。祝你好运但是在这种情况下,如何初始化loggedIn属性?我必须有一个方法,以确定在其他视图中,如果我登录或不容易。你能告诉我我的代码需要做哪些修改才能正常工作吗?我使用以下API来模拟服务器:
curl-xposthttps://reqres.in/api/login -d'{“电子邮件”:”peter@klaven“,”password“:“cityslicka”}'-H'内容类型:application/json'
身份验证卫士会告知您是否登录。如果你不是,那么你甚至不能导航到那条路线。但是,我如何重构stackblitz中的代码以不再使用这个变量呢?它与
|async
一起使用。你说得对,对不起,我刚才引用了。我让它使用这个代码,
返回this.http.post('/isAuthenticated').pipe(map(()=>{this.loggedIn.next(true);return true;}),catchError((err)=>{this.loggedIn.next(false);this.router.navigate(['/login']);返回observeable.of(false);})这和你刚才说的相符吗,你同意这个代码吗?是的,我想它行得通,但我看不出有什么意义。正如我所说,AuthGuard已经验证了是否允许您导航到某个路由。loggedIn总是正确的,因为如果它是错误的,你就无法到达路线。这就是为什么我觉得它是不必要的,它只会使你的代码更难遵循。在现实世界的应用程序中,您不会有这样的属性,而是管理实际的用户配置文件,该配置文件将是对象或空。