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



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

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

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

也许还有其他我看不到的解决方案?不,在我的情况下,我不能使用像Azure或亚马逊这样的第三方服务进行身份验证和授权。哪种方式是正确的,最安全,防止暴力攻击?

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

最新更新