symfony 2.2 で Web サイトを開発しています。私は FOSUserBundle を使用しており、私の Web サイトは基本的に、ホームページ、ログイン ページ、登録ページ、および保護された領域で構成されています。
私がやりたいことは、ユーザーが私のウェブサイトのアドレスを入力したときです:
匿名の場合 -> ホームページへ
覚えている場合 -> 保護されたエリアに移動
うまくいかない2つの異なることを試しました。
1) URLを保護された領域に配置すると、login_path へのリダイレクトが正しく行われます。しかし、security.yml で login_path を選択すると、問題が発生します。
/loginを入れると、匿名はホームページではなくログインにリダイレクトされます
/homepageを配置すると、匿名はホームページにリダイレクトされますが、ログインフォームに不正な資格情報を入力すると、/loginにエラーメッセージが表示される代わりにホームページにリダイレクトされます
2) url / available to anonymous をホームページに対応させて login_path = /loginにすると、覚えているユーザーも保護された領域ではなくホームページにアクセスできることを除けば、うまく機能します。
最後の状況では、それらが記憶されていることがわかった場合はそれらを安全な領域にリダイレクトしようとしますが、フォーラムで見つけた2つのコードとコントローラーで試したものが機能していません...
public function indexAction()
{
$securityContext = $this->container->get('security.context');
$user = $securityContext->getToken()->getUser();
if (is_object($user) && $user instanceof UserInterface ) {
return $this->redirect($this->generateUrl('tk_user_homepage'));
}else if( $securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') ){
return $this->redirect($this->generateUrl('tk_user_homepage'));
}else{
return $this->render('TkWelcomeBundle:Default:index.html.twig');
}
}
Web サイトに戻ると、$user を非オブジェクトとして取得し、2 番目のステートメントは false です。ただし、URLで保護された領域にアクセスできます。
それを行う正しい方法は何ですか(1または2)、それぞれの場合に何が欠けていますか?
編集
実際に私はこのテストを行いました:
ホームページから保護された領域に行き来し、ユーザーが is_granted かどうかをテストします。
「role_user」、「is_authenticated_anonimously」、「is_authenticated_remembered」、「is_authenticated_fully」
セキュリティで保護された領域では、期待どおりの (1,0,1,1) が得られますが、ホームページに移動すると (0,0,0,0) であり、セキュリティで保護された領域に戻って (1,0, 1,1)。
したがって、セキュリティ コンテキストは私のホームページでは利用できないと思います。誰かがこれについてヒントを持っていますか?
前もってありがとう、ジュール