1

ログインフォームのあるログインページがあります。したがって、ユーザーがすでにログインしている場合は、ログインページから別のページにリダイレクトしたいと思います。セキュリティで保護された領域はすべてのページで.*/secured.html、ログイン ページの URL は -login/page.htmlです。現在のページが保護された領域の下にないため、セキュリティトークン$this->container->get('security.context');がないというエラーが表示されました。トークンを使用したい場合 (存在する場合) 、これらすべてのページを保護された領域に追加する必要がありますか? このようにして、symfony2 はユーザーがログインしているかどうかを毎回チェックします (おそらくログインページにリダイレクトします)。

    login:
            pattern:  ^/demo/secured/login$
            security: false

認証トークンも存在しません。

では、すべてのアプリケーション ページで認証トークンを使用するにはどうすればよいでしょうか。それとも、これらすべてのページを保護された領域に追加する必要がありますか?

4

2 に答える 2

2

セキュリティをオフにすると、トークンがありません。ログインページはファイアウォールの内側に配置する必要があります。いいえ、すべての単一ページを設定に追加する必要はありません。

次に例を示します。

firewalls:
        main:
            pattern: ^/
            form_login:
                login_path: /account/login
                check_path: /account/login_check
            logout:
                path: /account/logout
            anonymous: true
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

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

ご覧のとおり、すべてのページでセキュリティを有効にしましたが、匿名でのアクセスを許可します。このアクセス制御により、- { path: ^/movie/, role: ROLE_USER }どのユーザーがページにアクセスできるかを完全に制御できます。これは、ユーザーが既にログインしていることを意味します。

詳細については、ドキュメントをお勧めします: http://symfony.com/doc/current/book/security.html

乾杯。

于 2013-09-06T23:48:47.907 に答える
0

トークンを使用したい場合 (存在する場合)、これらすべてのページを保護された領域に追加する必要がありますか?

はい、ファイアウォールの背後にあるセキュリティ トークンにアクセスする場所に配置する必要があります。ログイン ページでセキュリティ トークンにもアクセスする場合は、同じファイアウォールの内側に配置する必要があります。ただし、そのアクセス制御をIS_AUTHENTICATED_ANONYMOUSLY.

access_control:
    - { path: ^/secured/login/page.html$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
于 2013-09-07T00:02:15.630 に答える