如何创建和启用自定义用户检查

编辑本页

如何创建和启用自定义用户检查

在对用户进行身份验证期间,可能需要进行额外的检查,以验证是否允许标识的用户登录。通过定义一个自定义用户检查器,您可以定义每个防火墙应该使用哪个检查器。

创建自定义用户检查器

用户检查器是必须实现的类UserCheckerInterface.这个接口定义了两个方法checkPreAuth ()而且checkPostAuth ()在用户认证前和认证后进行检查。类的一个或多个条件未满足,则抛出扩展AccountStatusException类。考虑使用CustomUserMessageAccountStatusException,延伸至AccountStatusException并允许自定义显示给用户的错误消息:

12 34 5 6 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
名称空间应用程序安全使用应用程序实体用户作为AppUser使用欧宝娱乐app下载地址组件安全核心异常AccountExpiredException使用欧宝娱乐app下载地址组件安全核心异常CustomUserMessageAccountStatusException使用欧宝娱乐app下载地址组件安全核心用户UserCheckerInterface使用欧宝娱乐app下载地址组件安全核心用户用户界面UserChecker实现了UserCheckerInterface公共函数checkPreAuth(用户界面用户无效如果(!用户运算符AppUser) {返回;}如果用户->isDeleted ()) {//传递给该异常的消息将显示给用户CustomUserMessageAccountStatusException (“您的用户帐户已不存在。”);}}公共函数checkPostAuth(用户界面用户无效如果(!用户运算符AppUser) {返回;}//用户帐号过期,可能会通知用户如果用户->isExpired ()) {AccountExpiredException (“……”);}}}

启用自定义用户检查器

接下来,确保您的用户检查器已注册为服务。如果你在用默认的服务。yaml的配置时,服务会自动注册。

剩下要做的就是将检查器添加到所需的防火墙,其中的值是用户检查器的服务id:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9
#配置/包/ security.yaml#……安全:防火墙:主要:模式:^ /user_checker:App \安全\ UserChecker#……

使用多个用户检查器

6.2

ChainUserChecker类是在Symfony 6.2中添加的。欧宝娱乐app下载地址

应用程序通常具有多个身份验证入口点(例如传统的基于表单的登录和API),其中每个入口点可能具有唯一的检查器规则,以及所有入口点的公共规则。的服务,允许在防火墙上使用多个用户检查程序ChainUserChecker为每个防火墙创建类。

要使用链式用户检查器,首先需要用标记标记用户检查器服务security.user_checker。<防火墙>标签(<防火墙>安全配置中的防火墙名称)。服务标记还支持优先级属性,允许你定义调用用户检查器的顺序:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12
#配置/ services.yaml#……服务:App \安全\ AccountEnabledUserChecker:标签:-名称:security.user_checker.api,优先级:10-名称:security.user_checker.main,优先级:10App \安全\ APIAccessAllowedUserChecker:标签:-名称:security.user_checker.api,优先级:5

标记了检查器服务之后,接下来需要配置防火墙以使用security.user_checker.chain。<防火墙>服务:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13
#配置/包/ security.yaml#……安全:防火墙:api:模式:^ / apiuser_checker:security.user_checker.chain.api#……主要:模式:^ /user_checker:security.user_checker.chain.main#……
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 6.2支持通过苏禄人
欧宝娱乐app下载地址Symfony 6.2支持通过Les-Tilleuls.coop