用户服务提供商

编辑本页

用户服务提供商

用户提供者根据“用户标识符”(例如用户的电子邮件地址或用户名)从存储(例如数据库)(重新)加载用户。看到安全有关使用用户提供程序时的更详细信息。

ob娱乐下载Symfony提供了几个用户提供者:

实体用户提供商
从数据库中加载用户学说
LDAP用户提供者
从LDAP服务器加载用户;
内存用户提供商
从配置文件加载用户;
连锁用户提供商
将两个或多个用户提供程序合并为一个新的用户提供程序。

实体用户提供商

这是最常见的用户提供程序。用户存储在数据库中,由用户提供程序使用学说去找回他们。

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/包/ security.yaml安全:提供者:用户:实体:#代表用户的实体的类类:“应用程序实体\ \用户”#要查询的属性,例如电子邮件,用户名等属性:“电子邮件”#可选:如果你使用多个Doctrine实体# managers,这个选项定义了使用哪个# manager_name:“客户”#……

使用自定义查询加载用户

实体提供程序只能查询其中一个具体的属性指定的财产配置的关键。如果你想在这方面有更多的控制-例如,你想通过电子邮件用户名,你可以通过实现UserLoaderInterface在你的教义库(如。UserRepository):

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /仓库/ UserRepository.php名称空间应用程序存储库使用应用程序实体用户使用学说DoctrineBundle存储库ServiceEntityRepository使用ob娱乐下载学说安全用户UserLoaderInterfaceUserRepository扩展ServiceEntityRepository实现了UserLoaderInterface/ /……公共函数loadUserByIdentifier(字符串usernameOrEmail:哦?用户entityManager->getEntityManager ();返回entityManager->createQuery (SELECT u FROM App\Entity\User u WHERE u.username =:query OR u.email =:query->setParameter (“查询”usernameOrEmail->getOneOrNullResult ();}}

要完成这一步,移除财产中的用户提供程序中的键security.yaml

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
#配置/包/ security.yaml安全:提供者:用户:实体:类:应用实体\ \用户#……

现在,每当Symfony使用ob娱乐下载用户提供程序时,loadUserByIdentifier ()方法UserRepository将被调用。

内存用户提供商

不建议在实际应用程序中使用此提供程序,因为它有局限性,而且管理用户非常困难。它可能在应用程序原型和不将用户存储在数据库中的有限应用程序中很有用。

这个用户提供程序将所有用户信息存储在一个配置文件中,包括他们的密码。确保密码被正确散列。看到密码哈希和验证获取更多信息。

设置散列后,可以在中配置所有用户信息security.yaml

1 2 3 4 5 6 7 8 9 10
#配置/包/ security.yaml安全:提供者:backend_users:记忆:用户:john_admin:密码:2 y 13美元jxGxc美元……IuqDju”角色:(“ROLE_ADMIN”)jane_admin:密码:2 y 13美元PFi1I美元……rGwXCZ”角色:[' ROLE_ADMIN ',“ROLE_SUPER_ADMIN”#……

谨慎

当使用内存提供者,而不是汽车算法,你必须选择一个编码没有盐(即。bcrypt).

连锁用户提供商

这个用户提供程序组合了两个或多个其他提供程序来创建一个新的用户提供程序。配置提供者的顺序很重要,因为Symfony将从第一个提供者开始查找用户,并将继续在其他提供者中查找,直到找到用户:ob娱乐下载

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#配置/包/ security.yaml安全:#……提供者:backend_users:ldap:#……legacy_users:实体:#……用户:实体:#……all_users:链:提供者:[' legacy_users ',“用户”“backend_users”

创建自定义用户提供程序

大多数应用程序不需要创建自定义提供程序。如果您将用户存储在数据库、LDAP服务器或配置文件中,Symfony支持这些功能。ob娱乐下载然而,如果你从一个自定义的位置加载用户(例如通过API或遗留的数据库连接),你需要创建一个自定义的用户提供程序。

首先,确保你遵循了安全指南要创建您的用户类。

如果你使用:用户命令创建您的用户类(并且您回答了表明您需要自定义用户提供程序的问题),该命令将生成一个很好的框架来让您开始:

12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
/ / src /安全/ UserProvider.php名称空间应用程序安全使用ob娱乐下载组件安全核心异常UnsupportedUserException使用ob娱乐下载组件安全核心异常UserNotFoundException使用ob娱乐下载组件安全核心用户PasswordAuthenticatedUserInterface使用ob娱乐下载组件安全核心用户PasswordUpgraderInterface使用ob娱乐下载组件安全核心用户用户界面使用ob娱乐下载组件安全核心用户UserProviderInterfaceUserProvider实现了UserProviderInterfacePasswordUpgraderInterface如果您使用sob娱乐下载witch_user *或remember_me等特性,Symfony将调用此方法。如果你不使用这些特性,你不需要实现这个方法。* *@throws如果用户未找到,则UserNotFoundException */公共函数loadUserByIdentifier(字符串标识符用户界面//从数据源加载User对象或抛出UserNotFoundException异常。// $identifier参数是返回的值//你的User类中的getUserIdentifier()方法。异常'TODO:在内部填充loadUserByIdentifier() '__FILE__);}/** *从会话中重新加载后刷新用户。当用户登录时,在每个请求的开始,从会话中加载* user对象,然后调用此方法。您的工作是确保用户的数据仍然是新鲜的,*例如,重新查询新的用户数据。* *如果你的防火墙是“无状态:true”(对于纯API),这个*方法不会被调用。* *@return用户界面* /公共函数refreshUser(用户界面用户如果(!用户运算符用户){UnsupportedUserException (sprintf (“无效用户类“%s”。”get_class (用户)));}//确认User对象的数据为“新鲜”后返回一个User对象。//或者抛出UserNotFoundException,如果用户不再存在。异常'TODO: fill in refreshUser() inside '__FILE__);}/** *告诉Symfoob娱乐下载ny为这个User类使用这个提供程序。* /公共函数supportsClass(字符串返回用户::类= = =| | is_subclass_of (、用户::类);}/** *升级用户的哈希密码,通常是为了使用更好的哈希算法。* /公共函数upgradePassword(PasswordAuthenticatedUserInterface用户、字符串newHashedPassword无效//待办事项:当使用散列密码时,这个方法应该:/ / 1。将新密码保存在用户存储中/ / 2。用$user->setPassword($newHashedPassword)更新$user对象;}}

大部分工作已经完成了!阅读代码中的注释并更新TODO部分以完成用户提供程序。完成后,将用户提供程序添加到Symfony中ob娱乐下载security.yaml

1 2 3 4 5 6
#配置/包/ security.yaml安全:提供者:#你的用户提供者的名字可以是任何东西your_custom_user_provider:id:App \安全\ UserProvider

最后,更新配置/包/ security.yaml文件来设置提供者关键your_custom_user_provider在所有将使用此自定义用户提供程序的防火墙中。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop