2014-01-30 5 views
2

Я создал индивидуальный механизм регистрации в моем приложении Symfony2 (используя FOSUserBundle), который существует в дополнение к обычной регистрации.Автоматический вход в Symfony2 с FOSUserBundle

Есть ли какой-либо способ - после того, как я создал и сохранил пользователя в базе данных - чтобы автоматически войти в систему этого текущего пользователя. И после этого Пользователь должен быть перенаправлен на страницу, для которой требуется зарегистрированный пользователь (и из-за автоматического входа в систему пользователь может получить доступ к этой странице)?

Это в основном мой метод для создания пользователя:

public function signupAction(Request $request) { 
    $user = new User(); 

    $form = $this->createFormBuilder($user) 
       ->...() 
       ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) { 
     // Enable User 
     $user->setEnabled(true); 

     // Persist to DB 
     $em->persist($user); 
     $em->flush(); 

     // Here I need the auto-login before redirecting to _root 

     return $this->redirect($this->generateUrl('_root')); 
    } 

    return $this->render('MyBundle:MyController:signup.html.twig', array(
     'form' => $form->createView() 
    )); 
} 

ответ

6

Внимание: Это не похоже на работу в Symfony3 больше.

Цитирование от answer к duplicate question:

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; 

$user = //Handle getting or creating the user entity likely with a posted form 
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); 
$this->get('security.context')->setToken($token); 
$this->get('session')->set('_security_main',serialize($token)); 
+0

Это не работает в Symfony 3.1 –

+1

@AlexeyKosov, работал для меня в Symfony 3.1 с помощью 'security.token_storage' вместо' security.context ' – nowiko

+0

есть более простое и чистое решение с FOSUserBundle: https://stackoverflow.com/a/44386575/592477 – Nico

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