2

私の現在のプロジェクトのほとんどすべてのルートは、form_login.

認証されていないユーザーがアクセスできるようにするには、 2 つのルート/login/user/forgot_password保護しないでください。認証されたユーザーがこのルートにアクセスできないようにする方法はありますか?

私のコントローラーでは確認できますが$this->getUser()、セキュリティで保護されてsecurity.contextいない領域では、対応するデータが入力されていません。

構成 (security.yml):

security:
    firewalls:
        nonsecured:
            pattern:  ^/(login|user/forgot_password)$
            security: false
        secured:
            pattern:  ^/
            # ...
4

1 に答える 1

2

アクティブなファイアウォールがないと、現在のユーザー情報を取得できません。問題を解決する方法は次のとおりです。

  • nonsecuredアプリ全体がアクティブなファイアウォールで覆われるように、ファイアウォールを削除します。
  • ファイアウォールに追加anonymous: ~して匿名アクセスを有効にし、secured
  • アクセス制御を使用して、誰がどこにアクセスできるかを決定します。

    access_control:
        - { path: ^/login,                roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/forgot-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/,                     roles: ROLE_USER }
    

/login認証されたユーザーへのアクセスを防止するために/user/forgot-password、少なくとも次の2つのオプションがあります。

  • コントローラーでユーザーを確認します—提案した方法、または
  • JMSSecurityExtraBundleの式を使用します。

    access_control:
        - { path: ^/login,                access: 'isAnonymous()' }
        - { path: ^/user/forgot-password, access: 'isAnonymous()' }
        - { path: ^/,                     access: 'isAuthenticated()' }
    
于 2013-03-02T09:50:44.480 に答える