我无法使身份验证正常工作,但它只会出现在非常特定的情况下。身份验证是通过第三方API完成的,因此我编写了自己的用户提供程序类,并且在该类内部有一些可以在API和Symfony之间同步数据的代码,作为该同步过程的一部分,它确定用户应具有哪些角色。 这样做后,它通过ManyToMany关系设置角色和用户之间的关系。在我的用户对象在Symfony2中无提示身份验证失败
的getRoles()方法获取角色对象从数据库中,并把它变成一个字符串数组,角色名称来自我的数据库,并全部以ROLE_。
如果我登录与应该有它工作正常,没有多余的角色,一个帐户,但如果我登录到一个帐户应该有角色我只是送回到登录屏幕,并没有错误消息。
我检查日志,看到这些项:
security.INFO: User "[email protected]" has been authenticated successfully [] []
event.DEBUG: Notified event "security.interactive_login" to listener "Pogo\MyBundle\Listener\LoginListener::onSecurityInteractivelogin". [] []
event.DEBUG: Listener "Symfony\Component\Security\Http\Firewall::onKernelRequest" stopped propagation of the event "kernel.request". [] []
event.DEBUG: Listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener" was not called for event "kernel.request". [] []
event.DEBUG: Listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener" was not called for event "kernel.request". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse". [] []
security.DEBUG: Write SecurityContext in the session [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\SecurityBundle\EventListener\ResponseListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bridge\Monolog\Handler\FirePHPHandler::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\CacheListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
security.INFO: Populated SecurityContext with an anonymous Token [] []
event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException". [] []
security.DEBUG: Access denied (user is not fully authenticated); redirecting to authentication entry point [] []
security.DEBUG: Calling Authentication entry point [] []
我不明白它如何可以在顶部进行身份验证,然后尽快将检查它发现自己与一个匿名令牌防火墙这就是为什么它可能会让我回到登录屏幕。
我的防火墙/ ACCESS_CONTROL设置:
firewalls:
public:
pattern: /.*
anonymous: true
tessitura_login:
login_path: /account/login
check_path: /secure/login_check
logout:
path: /secure/logout
target:/
access_control:
- { path: ^/secure/.*, role: ROLE_USER }
- { path: ^/admin.*, role: ROLE_ADMIN }
- { path: ^/account/login/?, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
任何帮助,这将大规模赞赏,我已经在这呆了几个小时,现在我彻底难倒。
我不认为你找到了你的问题的答案? – Clint
对不起,克林特,现在可能有点晚了,但事实证明,会议场太小了。该代码在会话中存储了相当多的Doctrine对象,这些对象不适合导致该错误的数据库字段 – pogo