身份验证事件未调用

时间:2018-06-19 18:05:20

标签: symfony symfony4

我有以下简单的课程:

<?php

namespace App\EventListener;

use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;

class LoginListener implements EventSubscriberInterface
{

    private $logger = null;

    public function __construct (LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function onInteractiveLogin (InteractiveLoginEvent $event)
    {
        $this->logger->info('TEST');
    }

    public static function getSubscribedEvents ()
    {
        return [
          SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin',
        ];
    }

}

它位于/src下,应自动加载(Symfony 4.1.0)。

当我跑步时:

bin/console debug:event-dispatcher security.interactive_login

我看到了预期的结果:

Registered Listeners for "security.interactive_login" Event

 ------- ------------------------------------------------------- ---------- 
  Order   Callable                                                Priority  
 ------- ------------------------------------------------------- ---------- 
  #1      App\EventListener\LoginListener::onInteractiveLogin()   0         
 ------- ------------------------------------------------------- ---------- 

但是,当我成功(或以其他方式)登录时,该日志消息就不在这里-深入研究Symfony探查器-我可以看到它位于“未呼叫的监听器” 标签下? / p>

有什么想法我想念的吗?

编辑|

services.yaml:

imports:
    - { resource: 'company.yaml' }

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Legacy}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    #
    # ldap authentication service configuration
    # https://symfony.com/doc/current/reference/configuration/security.html
    Symfony\Component\Ldap\Ldap:
        arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
    Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
        arguments:
            -   host: davinci-1
                port: 389
                #encryption: tls
                options:
                    protocol_version: 3
                    referrals: false

    # 
    # We need to hook into default LDAP authentication to properly populate Symfony
    # roles and / or return legacy groups
    # http://symfony.com/doc/current/components/security/authentication.html#authentication-events
    # http://symfony.com/doc/current/event_dispatcher.html
    #App\EventListener\LoginListener:
    #  tags:
    #    - { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }

security.yaml

security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        ad_ldap:
            ldap:
                service: Symfony\Component\Ldap\Ldap
                base_dn: dc=company,dc=local
                search_dn: 'appuser'
                search_password: "XXX"
                default_roles: ROLE_USER
                uid_key: 'sAMAccountName'
                filter: '({uid_key}={username})'        
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            http_basic_ldap:
                provider: ad_ldap
                service: Symfony\Component\Ldap\Ldap                                
                dn_string: 'Company\{username}'  
                #query_string: '(sAMAccountName={username})'

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        # - { path: ^/admin, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }

0 个答案:

没有答案