Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 如何使用CQS模式创建登录实现?_Authentication_Cqrs - Fatal编程技术网

Authentication 如何使用CQS模式创建登录实现?

Authentication 如何使用CQS模式创建登录实现?,authentication,cqrs,Authentication,Cqrs,在CQS模式中,查询只负责读取数据库,而不负责修改状态。要在数据库中创建、更新或删除对象,我们使用命令。 如果我想尝试登录用户,我需要发送登录名和密码到服务器端。如果凭据作为响应是正确的,我希望得到一些userDto对象。如果客户端键入了正确的登录名,但输入了错误的密码,我需要修改用户对象的状态并增加失败登录尝试的次数 理论上,最好的选择是只向数据库发送一个请求,例如GetUserDataQuery 但如果查询将修改用户实体的状态,则意味着我们违反了CQS分离规则 我看到的另一个选项是首先发送一

在CQS模式中,查询只负责读取数据库,而不负责修改状态。要在数据库中创建、更新或删除对象,我们使用命令。 如果我想尝试登录用户,我需要发送登录名和密码到服务器端。如果凭据作为响应是正确的,我希望得到一些userDto对象。如果客户端键入了正确的登录名,但输入了错误的密码,我需要修改用户对象的状态并增加失败登录尝试的次数

理论上,最好的选择是只向数据库发送一个请求,例如GetUserDataQuery 但如果查询将修改用户实体的状态,则意味着我们违反了CQS分离规则

我看到的另一个选项是首先发送一个名为TryToLoginCommand的命令,如果HTTP响应是200,那么我可以发送一个GetUserDataQuery。在这种情况下,我们发送2个请求,而不是1个。但这条路100%安全吗

也许还有其他我看不到的解决办法? 不,在我的情况下,我不能使用第三方服务,如Azure或Amazon进行身份验证和授权。
哪种方式最安全,最能防止暴力攻击

不必生成命令来响应用户输入。您在服务器上提交用户名/pw进行验证(我希望您没有将用户pw发送回前端进行验证)。该请求的控制器发出验证用户所需的查询。如果用户有效,则控制器创建并执行命令以更新所需内容,然后向UI返回成功消息。如果登录失败,则再次执行命令更新所需内容,并返回num failed logins。它只是来自UI的一个请求,但在服务器端运行一个查询和命令。

从技术角度来看,这样的请求的正确名称是什么,因为它不是命令或查询,嗯?来自用户的是一个请求。控制器解释请求并创建完成请求所需的任何查询或命令。