使用 FOSUserBundle 自动登录 Symfony2 [重复]

Posted

技术标签:

【中文标题】使用 FOSUserBundle 自动登录 Symfony2 [重复]【英文标题】:Automatically login in Symfony2 with FOSUserBundle [duplicate] 【发布时间】:2014-02-22 21:11:53 【问题描述】:

我在我的 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()
    ));

【问题讨论】:

【参考方案1】:

注意:这似乎不再适用于 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));

【讨论】:

它在 Symfony 3.1 中不起作用 @AlexeyKosov ,在 Symfony 3.1 中使用 security.token_storage 而不是 security.context 为我工作 FOSUserBundle 有一个更简单、更干净的解决方案:***.com/a/44386575/592477

以上是关于使用 FOSUserBundle 自动登录 Symfony2 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

symfony2:使用 fosuserbundle 登录后使用引用

FOSUserBundle 使用电子邮件登录 (Symfony2)

FOSUserBundle 通过电子邮件与服务提供商登录,最佳实践

将 JSON 数据发布到 FOSUserBundle 注册、登录、个人资料等

在FOSUserBundle中登录后的自定义错误消息

Symfony2 在未登录时将 /admin/* 重定向到 /admin/login(或使用 FOSUserBundle?)