gpt4 book ai didi

php - 如何在领域驱动设计中处理用户 session

转载 作者:可可西里 更新时间:2023-11-01 12:17:19 25 4
gpt4 key购买 nike

在域驱动设计中(在 MVC 框架中)如何处理用户 session ?

我有一个User 域对象、一个UserRepository 和一个UserService

我的 UserService 类中有这个方法可以让用户登录。

public function login($email, $password, $remember = false)
{
$user = $this->userRepo->findByEmail($email);

if ($user && $user->getPassword() === $password) {
return $user;
}

return false;
}

如何让他们在 session 中保持登录状态?

我如何根据 session 用户 ID 自动加载用户?

谁能给我一个代码示例,说明我如何在 DDD 的应用程序中维持用户?

最佳答案

从 DDD 的角度来看,管理 session 是一组独特的行为,因此值得专门的服务。所以创建这样一个服务。

您可以将该服务作为依赖项传递给您的 UserService,这样 UserService 就可以使用 session 管理器来存储身份验证信息。

更好的是,身份验证的概念也可以被视为一组不同的行为,因此也可以为此创建一个服务。将您的 UserService 和 session 管理器作为依赖项传递给此身份验证服务。 (因此 session 管理器不再是 UserService 的依赖项。)

但即使身份验证也可以分解为几个不同的部分,这取决于您想要走多远。

很遗憾,我无法向您展示任何代码,因为这在很大程度上取决于您要执行的身份验证类型(HTTP Basic、表单登录、OAuth 等)、您想要实现的抽象级别以及您的个人喜好。

但是如果你想看看一个复杂的系统是什么样的,看看 Symfony 2 的安全组件,here in the documentationhere on github .

如果你考虑使用这个组件,你可以看看如何Silex implements it ( github ) 以了解如何使用它。

旁注

DDD 不仅仅是以某种方式编写代码。如果你想学习 DDD,我建议你阅读 Domain-Driven Design: Tackling Complexity in the Heart of Software (蓝皮书),Implementing Domain-Driven Design (红皮书),或者您可以从 Domain Driven Design Quickly 开始可供下载。

关于php - 如何在领域驱动设计中处理用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472057/

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