2016-03-26 14 views
3

Bir kernel.response olayı ayarlıyorum ve kullanıcının oturum açıp açmadığını test etmek istiyorum. Kullanıcı IS_AUTHENTICATED_REMEMBER Ben css ve js sunum dosyaları halinde hata 500 alırsanızYetkilendirme denetleyicisi olan Symfony kernel.response dinleyicisi

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), 
     ); 
    } 
} 

Benim sorunum olmadığını kontrol çattı: Burada

benim kodudur Sayfam (bunun üzerinde js veya css yok demektir). Bunları şarj etmenin bir yolu var mı? Sonunda kernel.response etkinliğini filtreleyin mi?

+0

Symfony'nin Debugger gelen tam hata mesajı paylaşabilir misiniz? CSS/JS'niz her zaman çalışmalıdır. Onlar statik dosyalar. – mblaettermann

+0

Ellerimi hataya almayı başardım: 'Dahili Sunucu Hatası | Symfony \ Component \ Security \ Core \ Exception \ AuthenticationCredentialsNotFoundException [message] Jeton depolama alanı kimlik doğrulama belirteci içermez. Bunun olası bir nedeni, bu URL için yapılandırılmış bir güvenlik duvarı olmaması olabilir ' –

cevap

1

belirteci dolayısıyla isGranted, statik dosyalarda null oldu Daha önce bir kontrol çalıştırmak zorunda Yani bir hata 500. döndürdü:

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

Ancak, statik dosyalarınız neden php tarafından sunuluyor? .htaccess – mblaettermann

+0

@mblaettermann'da yanlış yapılandırma gibi görünüyor. Oh:/Sanırım Symfony'nin varsayılan sürümü var. Bir örneğiniz var mı? (Ben htaccess ile çok iyi değilim) –