0

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)。

したがって、セキュリティ コンテキストは私のホームページでは利用できないと思います。誰かがこれについてヒントを持っていますか?

前もってありがとう、ジュール

4

1 に答える 1

0

動作しているように見えるものは次のとおりです。

ユーザーがユーザーにアクセスできるようにするには、ファイアウォールの下に URL が必要です。だから私はすべてのウェブサイトを匿名で承認された安全な領域に置き、アクセス制御で遊んでいます.

ここに私のsecurity.ymlがあります

firewalls:
    secured_area:
        pattern: ^/
        anonymous: ~
        form_login:
            login_path: /login
            check_path: /login_check
            default_target_path: tk_user_homepage
            provider: fos_userbundle
            remember_me: true
            csrf_provider: form.csrf_provider
        remember_me:
            key: %secret%
        logout:
            path:   fos_user_security_logout
            target: fos_user_security_login

access_control:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: IS_AUTHENTICATED_REMEMBERED }
    - { path: ^/admin/, role: ROLE_ADMIN }

これがいくつかの助けになることを願っています。

ジュール

于 2013-07-13T10:21:45.207 に答える