[英]Symfony kernel.response listener with authorization checker
I'm setting up a kernel.response
event and I want to test whether the user is logged in or not inside it. 我正在设置
kernel.response
事件,我想测试用户是否已登录。
Here is my code: 这是我的代码:
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 ),
);
}
}
My problem is that upon checking if user IS_AUTHENTICATED_REMEMBER
I get an error 500 upon serving css and js files on my page (means no js or css on it). 我的问题是,在检查用户
IS_AUTHENTICATED_REMEMBER
是否在我的页面上提供css和js文件时出现错误500(意味着没有js或css)。 Is there a way to charge those? 有没有办法收费? Eventually filter the kernel.response event on those?
最终在那些上过滤kernel.response事件?
The token was null
in the static files, therefore isGranted
returned an error 500. So I have to run a check before: 该标记在静态文件中为
null
,因此isGranted
返回错误500.所以我必须在之前运行检查:
if ( $this->tokenStorage->getToken() !== null
&& $this->securityChecker->isGranted( 'IS_AUTHENTICATED_REMEMBERED' ) ) {
return;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.