Я пытаюсь создать пользовательский прослушиватель в моем приложении Symfony 3.
Я хочу проверить, является ли пользователь IS_AUTHENTICATED_FULLY или нет.
Когда я добавляю службу @ security.authorization_checker в качестве аргумента для моего Iполучаю слишком много ошибок перенаправления на мой маршрут входа
У кого-нибудь есть работающее решение в symfony 3
security.yml:
security:
providers:
main:
entity:
class: Customer\CustomerBundle\Entity\utilisateur
property: loginUtil
encoders:
Customer\CustomerBundle\Entity\utilisateur:
algorithm: sha1
encode_as_base64: false
iterations: 1
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
Customer_firewall:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: /login
check_path: /login_check
logout:
path: /logout
target: Customer_standard_homepage
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/reset, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: ROLE_USER }
role_hierarchy:
ROLE_ADMIN : [ROLE_USER]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
Services.yml
services:
login_listener:
class: 'Customer\CustomerBundle\Listener\LoginListener'
arguments: ['@security.authorization_checker', '@doctrine']
tags:
- { name: 'kernel.event_listener', event: 'security.authentication.success', method: onSecurityAuthentication }
LoginListener.php
<?php
namespace Customer\CustomerBundle\Listener;
use Symfony\Component\Security\Core\Event\AuthenticationEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
/**
* Custom login listener.
*/
class LoginListener
{
private $authorizationChecker;
private $em;
public function __construct(AuthorizationChecker $authorizationChecker, Doctrine $doctrine)
{
$this->authorizationChecker = $authorizationChecker;
$this->em = $doctrine->getEntityManager();
}
/**
* Do the magic.
*
* @param InteractiveLoginEvent $event
*/
public function onSecurityAuthentication(AuthenticationEvent $event)
{
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
// user has just logged in
error_log('here');
}
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
// user has logged in using remember_me cookie
error_log('there');
}
// do some other magic here
$user = $event->getAuthenticationToken()->getUser();
error_log('FINALLY HERE');
// ...
}
}