2016-08-12 3 views
0

В моем проекте я использую Symfony 2.8, SonataAdminBundle и SonataUserBundle.Symfony2/SonataUserBundle - Автоматический вход в систему после регистрации

Я переопределяю регистр RegistrationController в FOSUserBundle. После успешной регистрации я хочу, чтобы Пользователь автоматически регистрировался в брандмауэре SonataAdmin.

После работы с моей регистрацией я называю это в действии:

$userManager->updateUser($user); 
$response = new RedirectResponse($this->generateUrl('sonata_admin_dashboard')); 
$this->authenticateUser($user, $response); 
$this->setFlash('notice', 'success!'); 
return $response; 

Моего FOSUser конфигурация выглядит следующим образом:

fos_user: 
    db_driver: orm 
    firewall_name: admin 
    user_class: Application\Sonata\UserBundle\Entity\User 
    service: 
     user_manager: sonata.user.orm.user_manager 
    registration: 
     confirmation: 
      enabled: false 
     form: 
      validation_groups: [pwValidation] 

И мой security.yml выглядит следующим образом:

firewalls: 
     admin: 
      pattern:   /admin/(.*) 
      context:   admin 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /admin/login 
       use_forward: true 
       check_path:  /admin/login_check 
       failure_path: null 
       default_target_path: /admin/dashboard 
       always_use_default_target_path: true 
      logout: 
       path:   /admin/logout 
      anonymous:   true 

Каждый раз, когда я регистрирую нового пользователя, я перенаправляюсь на экран входа в SonataAdmin с 40 1 Statuscode и профилировщик Symfony говорят, что я аутентифицирован с помощью анонимного пользователя.

Я уже пытался пропустить функцию

$this->authenticateUser($user, $response); 

и вручную вызвать это:

$token = new UsernamePasswordToken($user, null, 'admin', $user->getRoles()); 
$this->container->get('security.token_storage')->setToken($token); 
$this->container->get('session')->set('_security_main', serialize($token)); 

Но если я пытаюсь это я получаю такое же поведение.

Может ли кто-нибудь сказать мне, что я делаю неправильно, пожалуйста?

ответ

0

Я нашел причину, по которой автоматическая аутентификация не работает. Проблема заключалась в том, что мой маршрут /register не был за брандмауэром, где я хочу аутентифицировать пользователя. я изменил маршрут /admin/register и установить access_control параметры для данного маршрута в:

-{ path: ^/admin/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 

После этого пользователь правильно удостоверяться с вызовом метода $this->authenticateUser($user, $response);

Смежные вопросы