David的回答很好,但是对于新手来说,它缺少一些细节- 因此,这是要填补空白。
除了创建AuthenticationHandler之外,还需要使用创建处理程序的捆绑软件中的服务配置将其设置为服务。默认的捆绑软件生成将创建一个xml文件,但我更喜欢yml。这是一个示例services.yml文件:
#src/Vendor/BundleName/Resources/config/services.yml
parameters:
vendor_security.authentication_handler: Vendor\BundleName\Handler\AuthenticationHandler
services:
authentication_handler:
class: %vendor_security.authentication_handler%
arguments: [@router]
tags:
- { name: 'monolog.logger', channel: 'security' }
您需要修改DependencyInjection捆绑包扩展以使用yml而不是xml,如下所示:
#src/Vendor/BundleName/DependencyInjection/BundleExtension.PHP
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
然后在应用程序的安全性配置中,设置对您刚定义的authentication_handler服务的引用:
# app/config/security.yml
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
success_handler: authentication_handler
failure_handler: authentication_handler