5

セキュリティで保護されたルートがある場合、たとえばpanel以下のように、Symfony はログインしているユーザーのみにアクセスを許可します。

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/panel, role: ROLE_USER }

ログインしていないユーザーの場合、常に login_path にリダイレクトされます (私は FOSUserBundle を使用しています)。

security:
    firewalls:   
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                login_path:     fos_user_security_login

このリダイレクトはどこで無効化または上書きできますか? ユーザーをリダイレクトせずに、ログインフォームを直接表示したい。

と関係があると思いAccessDeniedHandlerInterfaceますが、security.yml でどのキーを上書きする必要がありますか? そして、デフォルトの実装はどこですか?

他の状況についてはDefaultLogoutSuccessHandler, DefaultAuthenticationFailureHandler, DefaultAuthenticationSuccessHandler、これらの状況ごとにサービスを実装できます。これにより、それぞれのインターフェイスが拡張され、カスタムの方法で状況を処理できます。ただし、AccessDenied については何も見つかりません。そのディレクトリには、インターフェイスのみが含まれています。

4

1 に答える 1

3

私はこれを手動で行います。

匿名でルートにアクセスできるようにします。

- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }

テンプレートで、ログインしているユーザーがいるかどうかを確認します。

{% if app.user is null %}
    <!-- Then display your login form -->
{% else %}
    <!-- Display the normal view -->
{% endif %}

または、コントローラーから実行します。

if (!is_object($this->get('security.token_storage')->getToken()->getUser())) {
    // Render the login form
}

このように、ユーザーが認証されているかどうかに応じてロジックを作成できます。

于 2016-02-23T12:13:36.357 に答える