Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Security/Http/Firewall/RememberMeListener.php
Строк: 195
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentSecurityHttpFirewall;

use 
PsrLogLoggerInterface;
use 
SymfonyComponentHttpKernelEventGetResponseEvent;
use 
SymfonyComponentSecurityCoreAuthenticationAuthenticationManagerInterface;
use 
SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use 
SymfonyComponentSecurityCoreExceptionAuthenticationException;
use 
SymfonyComponentSecurityHttpRememberMeRememberMeServicesInterface;
use 
SymfonyComponentSecurityHttpEventInteractiveLoginEvent;
use 
SymfonyComponentSecurityHttpSecurityEvents;
use 
SymfonyComponentEventDispatcherEventDispatcherInterface;

/**
 * RememberMeListener implements authentication capabilities via a cookie.
 *
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class RememberMeListener implements ListenerInterface
{
    private 
$tokenStorage;
    private 
$rememberMeServices;
    private 
$authenticationManager;
    private 
$logger;
    private 
$dispatcher;
    private 
$catchExceptions true;

    
/**
     * Constructor.
     *
     * @param TokenStorageInterface          $tokenStorage
     * @param RememberMeServicesInterface    $rememberMeServices
     * @param AuthenticationManagerInterface $authenticationManager
     * @param LoggerInterface                $logger
     * @param EventDispatcherInterface       $dispatcher
     * @param bool                           $catchExceptions
     */
    
public function __construct(TokenStorageInterface $tokenStorageRememberMeServicesInterface $rememberMeServicesAuthenticationManagerInterface $authenticationManagerLoggerInterface $logger nullEventDispatcherInterface $dispatcher null$catchExceptions true)
    {
        
$this->tokenStorage $tokenStorage;
        
$this->rememberMeServices $rememberMeServices;
        
$this->authenticationManager $authenticationManager;
        
$this->logger $logger;
        
$this->dispatcher $dispatcher;
        
$this->catchExceptions $catchExceptions;
    }

    
/**
     * Handles remember-me cookie based authentication.
     *
     * @param GetResponseEvent $event A GetResponseEvent instance
     */
    
public function handle(GetResponseEvent $event)
    {
        if (
null !== $this->tokenStorage->getToken()) {
            return;
        }

        
$request $event->getRequest();
        if (
null === $token $this->rememberMeServices->autoLogin($request)) {
            return;
        }

        try {
            
$token $this->authenticationManager->authenticate($token);
            
$this->tokenStorage->setToken($token);

            if (
null !== $this->dispatcher) {
                
$loginEvent = new InteractiveLoginEvent($request$token);
                
$this->dispatcher->dispatch(SecurityEvents::INTERACTIVE_LOGIN$loginEvent);
            }

            if (
null !== $this->logger) {
                
$this->logger->debug('Populated the token storage with a remember-me token.');
            }
        } catch (
AuthenticationException $failed) {
            if (
null !== $this->logger) {
                
$this->logger->warning(
                    
'The token storage was not populated with remember-me token as the'
                   
.' AuthenticationManager rejected the AuthenticationToken returned'
                   
.' by the RememberMeServices.', array('exception' => $failed)
                );
            }

            
$this->rememberMeServices->loginFail($request);

            if (!
$this->catchExceptions) {
                throw 
$failed;
            }
        }
    }
}
Онлайн: 0
Реклама