2016-08-12 23 views
0

私のプロジェクトでは、Symfony 2.8、SonataAdminBundleとSonataUserBundleを使用しています。Symfony2/SonataUserBundle - 登録後の自動ログイン

私は、FOSUserBundle内のRegistrationControllerのregisterActionをオーバーライドします。登録が成功すると、ユーザは自動的に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 Login Screenに40でリダイレクトされます1 Statuscodeと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

自動認証が機能しない理由がわかりました。 問題は、私の/registerルートがファイアウォールの背後にあって、ユーザーを認証したいということではありませんでした。 私はこのルートのaccess_control設定を/admin/registerへのルートを変更して設定:メソッドを呼び出すことで、ユーザーが正しく認証された後に

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

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

関連する問題