Symfony kernel.response слушатель с проверкой авторизации

Я настраиваю kernel.response событие, и я хочу проверить, вошел ли пользователь в него или нет.

Вот мой код:

services.yml

app.kernel.modal_injection:
class: App\UserBundle\EventListener\ModalListener
tags:
- { name: kernel.event_listener, event: kernel.response }
arguments:
- @security.authorization_checker

ModalListener.php

<?php
namespace App\UserBundle\EventListener;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;class ConnectModalListener implements EventSubscriberInterface
{
protected $securityChecker;

public function __construct( AuthorizationChecker $securityChecker )
{
$this->securityChecker = $securityChecker;
}

public function onKernelResponse( FilterResponseEvent $event )
{
$response = $event->getResponse();
$request = $event->getRequest();

if ( !$event->isMasterRequest() ) {
return;
}
if ( $request->isXmlHttpRequest() ) {
return;
}

if ( $this->securityChecker->isGranted( 'IS_AUTHENTICATED_REMEMBERED' ) ) {
return;
}

// CODE HERE}

public static function getSubscribedEvents()
{
return array(
KernelEvents::RESPONSE => array( 'onKernelResponse', 0 ),
);
}
}

Моя проблема в том, что после проверки, если пользователь IS_AUTHENTICATED_REMEMBER Я получаю ошибку 500 при подаче файлов css и js на мою страницу (означает, что на ней нет js или css). Есть ли способ зарядить их? В конце концов, отфильтруйте событие kernel.response по тем?

4

Решение

Знак был null поэтому в статических файлах isGranted вернул ошибку 500. Поэтому я должен выполнить проверку раньше:

if ( $this->tokenStorage->getToken() !== null
&& $this->securityChecker->isGranted( 'IS_AUTHENTICATED_REMEMBERED' ) ) {
return;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]