authentication - 是 CQRS 中的登录/注册命令或查询

那么对于登录,因为它实际上并没有在数据库中创建任何新内容,而只是在我们登录后返回,可能还有一些用户数据,它应该是命令还是查询?

至于注册,既然创建了一个新用户,那么它应该是一个命令吗?如果我想返回用户数据或 jwt 怎么办?

我是否应该运行我的命令,并在客户端收到响应后立即运行查询?

最佳答案

对于大多数与设计相关的问题,我会用“视情况而定”来回答这个问题。我已经看到这两种解决方案在不同情况下实现。

您需要问的主要问题是,您是否将用户登录视为系统状态更改。请注意,它是否更改数据库中的状态无关紧要。系统不仅仅是数据库。

作为命令登录

对于某些系统,了解哪些用户已登录以及何时、从何处登录等很重要。我见过的一个例子是医疗系统,需要记录哪个医生何时何地登录,以及哪些医疗记录已被访问。此外,在一台机器上登录会停止另一台机器上的 session 。这些操作的可靠跟踪对于应用程序至关重要。因此,登录被实现为生成存储在事件存储中的事件的命令。投影为每个用户保留当前登录状态。

以查询方式登录

然而,我见过的大多数系统都需要简单地了解是否可以将任何给定凭据映射到用户帐户。如果是这种情况,将生成一个包含身份验证“证明”的 token 。系统本身并不真正关心谁登录了。只是每个请求都需要通过检查“证明”来验证。在这种情况下,登录是一个查询。

https://stackoverflow.com/questions/71797886/

相关文章:

c++ - 临时初始化和引用初始化

c - 在格式控制字符串中使用消息

c# - 使用 EF Core 按 Id 检索实体的通用方法

kubernetes - kubectl 等到 pod 消失(终止)

android - 我无法将 Android 项目从 Delphi 10.4 迁移到 Delphi

java - 如何使用 Collectors.collectionAndThen 和 Collect

node.js - 如何在某个日期之前安装 Node 包及其依赖项?

c - 你怎么能告诉计算机它正在添加而没有 addl 在程序集中

node.js - Remix.run 不使用 node.js 作为后端吗?

ios - 什么时候在 ios 中选择 serialQueue 而不是并发队列