1

FOSUserBundleを使用したsymfony2.1プロジェクトがあります。バンドルは正しくインストールされています。すべての機能は、デフォルトの/loginフォームを使用して正しく機能します。

しかし、今度はログインフォームのルートをホームページと同じになるように変更したいと思います(パス:/)。

私は試した:

security.ymlの変更--login_path :

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /
        logout:       true
        anonymous:    true

およびaccess_controlから:

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

ホームページにアクセスしようとすると、無限のリダイレクトに入ります(私は推測します)

ページが適切にリダイレクトされていませんFirefoxは、サーバーがこのアドレスの要求を決して完了しない方法でリダイレクトしていることを検出しました。

また、FOSUserBundleのドキュメント内でこの動作のトラブルシューティングを行うための情報が見つかりませんでした。

簡単に言うと、first_pageをログインページとして機能させたいのです。

4

2 に答える 2

2

リダイレクトループがあります。

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }    #1
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }  #2
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } #3
- { path: ^/admin/, role: ROLE_ADMIN }                      #4
- { path: ^/*, role: ROLE_USER }                            #5
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }          #6

これは、最初に、#5のアクセス制御にROLE_USERが必要であることを伝えてから、 IS_AUTHENTICATED_ANONYMOUSLYも必要であることを伝えているためです(5番目と6番目のルールの両方が一致します)

アクセス制御は順序に依存します。ルールは定義された順序で適用されます。次のことを試してください。

access_control:
- { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY } # NOTE THE $
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }        
- { path: ^/*, role: ROLE_USER }

ルールを移動しました

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

初めにそれが前に一致するように

- { path: ^/*, role: ROLE_USER }
于 2013-01-15T17:02:56.030 に答える
0

security.ymlを変更する必要があると思います: login_path: /tologin_path: /login

そしてあなたのaccess_control:

{ path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }    #1
{ path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }  #2
{ path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } #3
{ path: ^/admin/, role: ROLE_ADMIN }                      #4

この助けを願っています!

于 2013-07-02T11:05:34.357 に答える