symfonyで自動ログイン機能を使用しようとしていますが、ログインイベントを発生させてユーザオブジェクトを設定しています。ユーザオブジェクトは、そのコントローラで利用可能ですが、私は他のコントローラを使用しようとすると、ユーザーオブジェクトではなく、ユーザ情報でログインして示すのannonは述べていますsymfonyのコントローラでユーザオブジェクトにアクセスできない
コントローラーA
private function autoLogin($request, $username)
{
$em = $this->getDoctrine()->getManager();
if (!$usr = $em->getRepository('AppBundle:User')->findOneBy(['username' => $username])) {
throw $this->createNotFoundException('User does not exist');
}
$token = new UsernamePasswordToken($usr, $usr->getPassword(), "secured_area", $usr->getRoles());
$this->get('security.token_storage')->setToken($token);
$loginEvent = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $loginEvent);
$user = $this->get('security.token_storage')->getToken()->getUser();
dump($user); // can see user object without any issue
if (!$this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
throw new AccessDeniedException();
}
return $usr;
}
コントローラーB
public function editAction(Request $request)
{
$user = $this->get('security.token_storage')->getToken()->getUser();
print_r($user); // result is annon.
}
のsecurity.yml
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
providers:
doctrine_provider:
entity:
class: AppBundle:User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
anonymous: ~
provider: doctrine_provider
pattern: ^/
form_login:
login_path: security_login
check_path: security_login
csrf_token_generator: security.csrf.token_manager
logout:
path: /logout
target: /login
access_control:
- { path: ^/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
私はあなたがしようとしていることがはっきりしていないと思います。あなたはコントローラでユーザにログインし、次のページではユーザはログインしていないように見えますか?または、あるコントローラから別のコントローラに要求を転送しますか? – Stepashka
security.ymlファイルも提供できればいいですね。 – Stepashka
@Stepashka。 security.ymlファイルの内容で質問を編集しました。コントローラにログインしようとしていて、次のページのユーザがログインしていないように見えます。オブジェクトにはannonが表示されます。 – user1965773