Symfony2 / SonataUserBundle - 注册后自动登录

时间:2016-08-12 12:19:08

标签: symfony fosuserbundle sonata-admin sonata-user-bundle

在我的项目中,我使用Symfony 2.8,SonataAdminBundle和SonataUserBundle。

我覆盖了FOSUserBundle中RegistrationController的registerAction。注册成功后,我希望用户自动登录SonataAdmin后端。

在处理我的注册后,我在Action中调用了这个:

$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

每当我注册一个新用户时,我都会被重定向到带有401状态代码的SonataAdmin登录屏幕,Symfony探查器说我已经使用AnonymousToken进行了身份验证。

我已经尝试跳过功能

$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 个答案:

没有答案