Php 如何在域驱动设计中处理用户会话
在域驱动设计(MVC框架)中如何处理用户会话 我有一个Php 如何在域驱动设计中处理用户会话,php,session,domain-driven-design,Php,Session,Domain Driven Design,在域驱动设计(MVC框架)中如何处理用户会话 我有一个User域对象,一个UserRepository和一个UserService 我在我的UserService类中使用了这个方法来登录用户 public function login($email, $password, $remember = false) { $user = $this->userRepo->findByEmail($email); if ($user && $user->
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;
}
如何让他们使用会话登录
如何根据会话用户id自动加载用户
有人能给我一个例子,用代码说明我如何在DDD中支持我的应用程序中的用户吗
if(!isset($_SESSION['user'])) {
if ($user && $user->getPassword() === $password) {
$_SESSION['user'] = $user;
return $user;
}
} else {
return $_SESSION['user'];
}
也许是这样的。只要确保在注销功能上销毁会话,从DDD的角度来看,管理会话是一组独特的行为,因此应该提供专门的服务。因此,创建这样一个服务 您可以将该服务作为依赖项传递给
UserService
,因此UserService
可以使用会话管理器存储身份验证信息
更好的是,身份验证的概念也可以被视为一组不同的行为,因此也可以为此创建一个服务。将您的UserService
和会话管理器作为依赖项传递到此身份验证服务。(因此会话管理器不再是UserService
的依赖项)
但是,即使身份验证也可以分解为几个不同的部分,这取决于您要走多远
不幸的是,我无法向您展示任何代码,因为这在很大程度上取决于您希望执行的身份验证类型(HTTP Basic、表单登录、OAuth等)、您希望实现的抽象级别以及您的个人偏好
但是,如果您想了解复杂系统的外观,请查看Symfony 2的安全组件,以及
,如果您考虑使用这个组件,您可以查看如何()获得如何使用它的感觉。 旁注
DDD不仅仅是以某种方式编写代码。如果您想学习DDD,我建议您阅读(蓝皮书),(红皮书),或者您可以从下载的内容开始学习。我还强烈建议您学习Symfony安全组件(或基于SpringFramework(Java)的Spring安全组件)因为它将身份验证和授权的复杂概念分解为具有明确关系的小块+向上一步。