1

必要な認証 (FOSUserBundle を使用) を使用して symfony2 Web サイトを開発しました。ここで、匿名の訪問者のためにさらに 2 つの例外を追加することにしました: インデックス ページ ("/") と連絡フォーム ("/contact")。

security.yml を変更すると、これらが壊れます。

  • 小枝の連絡フォーム ページで、「{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}」がすべて機能しなくなりました。もう認証されていないようです。
  • 私の小枝インデックスページでも同じ問題があります。

これが私のsecurity.ymlです。些細なことかもしれませんが、security.ymlファイルを使用して「認証済みセッションとの接続を維持する」に関する詳細情報を入手できるドキュメントにはありません。私が試したことはすべてうまくいきません。

security:
    encoders:
        "FOS\UserBundle\Model\UserInterface": sha512

    role_hierarchy:
        ROLE_AUTHOR:            ROLE_USER
        ROLE_ADMIN:             [ROLE_USER, ROLE_AUTHOR]

    providers:
        fos_userbundle:
            id: fos_user.user_manager

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:   ^/(login$|register|resetting)
            anonymous: true

        token:
            pattern:    ^/administration/create-user/confirmation-token/
            anonymous: true

        #this is where it fail....
        contact:
            pattern:    ^/contact$
            anonymous: true

        index:
            pattern:    ^/$
            anonymous: true


        # Main Firewall
        main:
            pattern: ^/+
            form_login:
                provider:    fos_userbundle
                remember_me: true
            remember_me:
                key:         %secret%
            anonymous:       false
            logout:          true
            #http_basic:
            #    realm: "Secured Demo Area"

    access_control:
        #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
        #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

前もって感謝します

4

2 に答える 2

3

やり方が間違っています :) 必要なファイアウォールはごくわずかです。各 URL の各ファイアウォールではありません。

このようにしてください:

firewalls:
    main:
        pattern:        ^/
        switch_user:    true
        anonymous:      ~
        form_login:
            provider:   fos_userbundle
            login_path: /login
        logout:
            path:       /logout
access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

次に別の項目を access_control に追加します。

于 2012-10-09T07:55:25.407 に答える
1

連絡先とインデックス用に異なるファイアウォールを作成する代わりに、それらを に追加するaccess_control必要があります。それらは、アプリケーションの残りの部分と同じファイアウォールで処理する必要があるためです ( main)。それらは、どのロールがそれらにアクセスできるかを変更する必要があるという点でのみ異なります。

main:
    pattern:        ^/
    ...
access_control:
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/contact$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

明確にするために編集:あなたのように異なるファイアウォールを指定すると、それらのページが現在のセキュリティコンテキストの外に置かれるため、ファイアウォールのメインからのログインはこれらのファイアウォールには適用されません。

于 2012-10-09T12:30:19.443 に答える