Symfony 2.8-> 3.4升级IsGranted('IS_AUTHENTICATED_ANONYMOUSLY')引发错误 [英] Symfony 2.8 -> 3.4 Upgrade IsGranted('IS_AUTHENTICATED_ANONYMOUSLY') Throws Errors
问题描述
我正在将Symfony从2.8升级到3.4,并且我具有身份验证侦听器.
I'm in the process of upgrading Symfony from 2.8 to 3.4 and I have a Authentication Listener.
侦听器的构造函数
public function __construct(EntityManager $entityManager, SessionInterface $session, Security $security, LoggerInterface $logger, Redis $redis, $secret)
{
$this->entityManager = $entityManager;
$this->session = $session;
$this->security = $security;
$this->logger = $logger;
$this->redis = $redis;
$this->secret = $secret;
}
正在侦听器中调用的On Request函数
On Request Function which is calling in listener
public function onRequest(GetResponseEvent $event)
{
//Validate token
//Get Authorization Header
$headers = $event->getRequest()->headers;
$authHeader = $headers->get('Authorization');
//Check if Header value starts with 'Bearer'
if($this->startsWith($authHeader, self::$BEARER_HEADER)) {
// Allow request to be processed by controllers
//token handler
} else {
$securityContext = $this->security;
if ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY')) {
return;
} else {
throw new SessionTimeoutException();
}
}
}
Service.yml
Service.yml
app.token_listener:
class: Insead\MIMBundle\Listener\AuthTokenListener
arguments: ["@doctrine.orm.entity_manager", "@session", "@security.helper", "@logger", "@redis.authtoken", "%secret%"]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onRequest, priority: 0 }
ACL列表条目-security.php
ACL list entry - security.php
'access_control' => array(
array('path' => '^/api/(.*?)/login', 'role'=>'IS_AUTHENTICATED_ANONYMOUSLY'),
)
我尝试使用用户名和密码访问登录路由,但出现以下错误
im trying to access login route with username and password but i get following error
GENERAL EXCEPTION: The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL. in
/var/www/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authorization/AuthorizationChecker.php line 55
Exception caught by Listener::
[
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Security.php",
"line": 65,
"function": "isGranted",
"class": "Symfony\\Component\\Security\\Core\\Authorization\\AuthorizationChecker",
"type": "->",
"args": [
"IS_AUTHENTICATED_ANONYMOUSLY",
null
]
},
{
"file": "/var/www/src/Insead/MIMBundle/Listener/AuthTokenListener.php",
"line": 135,
"function": "isGranted",
"class": "Symfony\\Component\\Security\\Core\\Security",
"type": "->",
"args": [
"IS_AUTHENTICATED_ANONYMOUSLY"
]
},
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php",
"line": 212,
"function": "onRequest",
"class": "Insead\\MIMBundle\\Listener\\AuthTokenListener",
"type": "->",
"args": [
null,
"kernel.request",
null
]
},
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php",
"line": 44,
"function": "doDispatch",
"class": "Symfony\\Component\\EventDispatcher\\EventDispatcher",
"type": "->",
"args": [
[
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onRequest"
],
[
null,
"onController"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"configure"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onKernelRequest"
],
[
null,
"onRequest"
]
],
"kernel.request",
null
]
},
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php",
"line": 127,
"function": "dispatch",
"class": "Symfony\\Component\\EventDispatcher\\EventDispatcher",
"type": "->",
"args": [
"kernel.request",
null
]
},
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php",
"line": 68,
"function": "handleRaw",
"class": "Symfony\\Component\\HttpKernel\\HttpKernel",
"type": "->",
"args": [
{
"attributes": null,
"request": null,
"query": null,
"server": null,
"files": null,
"cookies": null,
"headers": null
},
1
]
},
{
"file": "/var/www/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php",
"line": 200,
"function": "handle",
"class": "Symfony\\Component\\HttpKernel\\HttpKernel",
"type": "->",
"args": [
{
"attributes": null,
"request": null,
"query": null,
"server": null,
"files": null,
"cookies": null,
"headers": null
},
1,
true
]
},
{
"file": "/var/www/web/app.php",
"line": 29,
"function": "handle",
"class": "Symfony\\Component\\HttpKernel\\Kernel",
"type": "->",
"args": [
{
"attributes": null,
"request": null,
"query": null,
"server": null,
"files": null,
"cookies": null,
"headers": null
}
]
}
]
我已经花了几天时间,但仍然想不出解决办法.
I have spend days on this and i still couldn't figure it out to fix it.
对不起,如果已经回答了这个问题,我尝试搜索,并尝试了各种帖子中提到的内容,但无法解决.我也是symfony的新手.
Im sorry if this is already answered question i tried to search and i tried things which were mentioned in various posts and it didn't resolve it. im new to symfony too.
Full Security.php
Full Security.php
https://www.codepile.net/pile/7O1LJkpv
AuthTokenListner.php
AuthTokenListner.php
https://www.codepile.net/pile/Xv1ZMlAP
推荐答案
问题具有优先顺序.
感谢@cerad提供了相关线索
thanks @cerad for giving a clue about it
bin/console debug:event-dispatcher kernel.request
帮助解决了该问题.我正在使用
helped to solve the issue. i was using
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse, priority: 10 }
在Services.yml中,它与
in Services.yml and it had a conflict with the
getSubscribedEvents()
因此,我删除了标签,只保留了
therefore i have removed tags and only kept
public static function getSubscribedEvents()
{
return array(
KernelEvents::REQUEST => array('onKernelRequest', 10),
);
}
然后,我通过将其他两个侦听器的优先级设置为与symfony 2.8中相同的优先级,将身份验证侦听器降低了
then i moved authentication listener to the down by giving high priority to other two listeners as same as it was there in symfony 2.8
感谢大家帮助我解决这个特别的@Pie @Cerad和@BoShurik
Thanks all for helping me out on this specially @Pie @Cerad and @BoShurik
这篇关于Symfony 2.8-> 3.4升级IsGranted('IS_AUTHENTICATED_ANONYMOUSLY')引发错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!