4

単純なフォームを使用してユーザーを追加することになっているコントローラーがありますが、ユーザーを手動で認証することができません。

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

public function addAction($user)
    {
           $token =new UsernamePasswordToken(
                    $user->getUsername(),
                    $user->getPassword(),
                    'secured_area',
                   $user->getRoles()
                    );

           $this->get('security.context')->setToken($token);
           // as suggested in some other answers

           $request->getSession()->set('_security_secured_area', serialize($token));
           // as suggested in http://techblog.zabuchy.net/2012/manually-authenticate-symfony-2-user/

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

安全なルートへのリダイレクトは機能し$this->getUser()ますが、認証が適切に設定されていないため、メソッドはnullを返します...ショートカットの代わりにユーザー 取得でき$user= $this->get('security.context')->getToken();ます 。$user= $this->get('security.context')->getToken()->getUser();$this->getUser()

4

3 に答える 3

6

問題が解決しました - 2 つの点が欠けていました: 1)InteractiveLoginEventリンクのために -thanks mpm をディスパッチする必要がありました 2) このコントローラーのルートはsecured_areaファイアウォールの下にありませんでした - merci Florian ;)

于 2013-01-29T22:43:47.153 に答える
0

これを試すことができます

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

$token = new UsernamePasswordToken($user, $user->getPassword(), "firewallname", $user->getRoles());
于 2013-01-25T00:56:40.903 に答える
-1

@ user19340357 が言ったように、手動でトークンをインスタンス化できます。

彼が言い忘れていたのは、セキュリティ コンテキストで設定する必要があるということです。

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

$token = new UsernamePasswordToken($user, $user->getPassword(), "firewallname", $user->getRoles());
$securityContext = $this->container->get('security.context'); // do it your way
$securityContext->setToken($token);
于 2013-01-25T09:19:40.143 に答える