1

我正在尝试在ngrx 下设计一种身份验证机制,但我还没有完全理解ngrx。

身份验证是这样工作的:客户端输入他的电子邮件和密码,使用他的凭据向 /api/auth 发出请求,如果凭据不正确,我们会收到错误消息,并且会在登录表单上看到错误消息。如果凭据正确,我们会收到用户对象并将用户重定向到主页。

这是我的看法

在此处输入图像描述

所以我正在努力的部分是何时@Effect收到响应。

我假设在我的商店中,我有一个userReducer包含用户状态的。当响应来自api/auth用户时,则将一个操作SET_USER分派给减速器以设置用户。但是我不确定如何处理错误消息。

  • 我是否也需要为表单提供减速器?
  • 每种形式都需要减速器吗?在我看来,错误消息不是应用程序长期存在状态的一部分。这只是应该显示然后忘记的东西。
  • 如何在登录成功时重定向?
4

1 回答 1

1

您可以.catch在效果中使用返回类似 LOGIN_FAILED 的操作来处理这种情况。您绝对应该有一个减速器来处理这种情况,而不是在 SET_USER 的减速器中处理它。

每个表格都需要减速器吗?

不会。如果你设计的 state 很聪明,你可以让同一个 reducer 处理多个错误消息。但是,返回的错误消息应该设置为 state,所以你可能应该有一个 action+reducer 来清除错误消息。

如何在登录成功时重定向?

免责声明:我对这种特殊情况没有经验。

由于 @ngrx/effects 处理副作用(因为 reducer 是纯的),所以可以让 effect 进行重定向。我不确定这是否是正确的方法,但我认为重定向是一种副作用,因此可以在效果中处理。

另一种选择是使用防护来根据身份验证的结果处理重定向。

于 2017-10-31T09:39:33.783 回答