2017-01-05 5 views
1

У меня есть User объект, который реализует UserInterface, \Serializable, EquatableInterfaceВход пользователя, без отправки формы (Symfony 3)

Он устанавливается в настройках безопасности:

security: 

    encoders: 
     AppBundle\Entity\User: 
      algorithm: sha512 

    providers: 
     our_db_provider: 
      entity: 
       class: AppBundle:User 
       property: email 

    firewalls: 
     main: 
      anonymous: ~ 
      provider: our_db_provider 
      form_login: 
       login_path: login 
       check_path: login 

    access_control: 
     - { path: ^/ , roles: IS_AUTHENTICATED_ANONYMOUSLY} 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     #... 

Я хотел бы, чтобы выбрать пользователя из базу данных и войти в текущий посетитель, как выбранный пользователь.

$user = $em->getRepository('App\Entity\User')->find($user_id); 

Я понятия не имею, как управлять им. Я не использую FOSUserBundle. Я искал решение, но ничего не нашел, только AuthenticationUtils, который работает только с формами.

+0

Возможный дубликат [Как программировать логин/аутентификацию пользователя?] (Http://stackoverflow.com/questions/9550079/how-to-programmatically-login-authenticate-a-user) – Pete

+1

Возможно, вы спрашиваете, как для перехода к пользователю: http://symfony.com/doc/current/security/impersonating_user.html – Cerad

ответ

0

В \ Symfony \ Component \ Security \ HTTP \ Firewall \ UsernamePasswordFormAuthenticationListener можно найти строки, которая показывает, как сделать авторизацию вручную, без выполнения подчиненной формы:

$request->getSession()->set(Security::LAST_USERNAME, $username);

return $this->authenticationManager->authenticate(new UsernamePasswordToken($username, $password, $this->providerKey));

$this->providerKey может от security.yml в качестве ключа от брандмауэры раздел.

Если брандмауэров секция выглядит

firewalls: 
     secured_area: 
     pattern: ^/ 
     form_login: 
      check_path: login_check 
      login_path: login 
     logout: 
      path: /logout 

затем providerKey = secured_area.

authenticationManager может быть взят у security.authentication.manager сервис.

Надеюсь, что это сработает!