gpt4 book ai didi

Angular2 在 CanActivate 之前解析

转载 作者:太空狗 更新时间:2023-10-29 17:11:26 26 4
gpt4 key购买 nike

我有一个身份验证服务,它实现了 Resolve 接口(interface)以返回一个可观察对象,一旦从服务器检索到用户的身份验证状态,该对象就会被解析。

这个相同的身份验证服务实现了 CanActivate 接口(interface),以阻止用户在未登录的情况下访问组件。

目前,canActivate 函数在 resolve 函数解析之前触发,这意味着它会在从服务器检索登录状态之前检查用户的登录状态。

我的问题是,在解决 resolve 之前如何阻止调用 canActivate 函数,或者是否有其他方法可以实现我想要的?

谢谢最大。

最佳答案

CanActivate 总是在设计之前运行..

..因为解析器应该只在 CanActivate 守卫完成他们的工作(身份验证,清理,..)之后运行。当您遵循此模式(见下文)时,通常没有理由反转或更改此顺序。


<强>1。 CanActivate(身份验证):

  • 验证/验证用户。
  • 获取从服务器或 API 查询/获取数据所需的 token 。
  • 使用 PromiseObservable确保解析器等待 CanActivate 守卫完成

<强>2。 Resolve(获取数据):

  • 当所有守卫都通过后,解析器就该运行了
  • 在您确定用户已通过身份验证时获取数据。
  • 使用 token 等从服务器获取数据。
  • 使用 PromiseObservable确保在解析数据可用时加载组件

<强>3。 constructor/OnInit(使用数据):

  • 从解析器获取数据(例如,ActivatedRoute.snapshot.data)。
  • 在您的模板中呈现数据或将其发送到服务。

如果不知何故,您确实需要等待解析器完成,只需将您的代码从守卫移至解析器即可

您可以阅读更多相关信息 in this thread on GitHub .

关于Angular2 在 CanActivate 之前解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39190427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com