5

FOSUserBundle を使用しており、2 つの異なるルート (またはそれ以上) からログインできる必要があります。これらのルートには異なるテンプレートがあり、異なるエリアにログインします。ログイン間で異なるのは、必要な権限だけです。ルートは次のようなものになります

site.com/login

site.com/admin/login

また、可能なsite.com/ajax_login

FOSUserBundle の login.html.twig から CSRF トークン以外のすべてを取り除き (オーバーライドされます)、独自のログイン ボックスとログイン ルートをレンダリングするルートを作成することで、さまざまなテンプレートをレンダリングする方法を考え出すことができました。 (CSRF トークンだけがレンダリングされるように)。フォームがログインにポストバックし、失敗した場合は代わりにそのページが表示されるため、これは管理者/ログインでは機能しません。

これを達成する簡単な方法はありますか?

4

3 に答える 3

2

私はしばらく同じ質問に悩まされていましたが、自分で解決策を作成しました。簡単な解決策があるに違いないことはわかっていました...

新しいログイン テンプレートをより簡単に作成できるプル リクエストを送信しました。https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1186でプル リクエストを確認してください。

これを実現する別の非常に簡単な方法もあります。SecurityController を拡張し、次の内容で renderLogin メソッドを変更します

protected function renderLogin(array $data, $template)
{
    return $this->container->get('templating')->renderResponse('YourBundle:Security:login.html.twig');
}

次に、新しく作成したコントローラーへのルートを作成します。

admin.login:
    pattern: /admin/login
    defaults: { _controller: YourBundle:Security:login }

この後は、それに応じてセキュリティ構成を変更するだけです。form_login login_path を /admin/login に変更すると、準備完了です。

于 2013-06-30T10:31:24.177 に答える
1

最終的に思いついたのは次のとおりです。基本的に、両方とも同じファイアウォールを使用し、同じコンテキストを共有するため、通常のログインでログインすると、管理者にもアクセスできます(管理者であると仮定)

firewalls:
    admin:
        context:            site
        switch_user:        true
        pattern:            /admin(.*)
        form_login:
            provider:       fos_userbundle
            login_path:     /admin/login
            success_handler: admin_authentication_handler
            use_forward:    false
            check_path:     /admin/login_check
            failure_path:   null
            use_referer:    true
            always_use_default_target_path: true
            default_target_path: /admin/
        logout:
            path:           /admin/logout
            target:         /admin/login
        anonymous:    true
    public:
        pattern:   ^/
        context:            site
        form_login:
            login_path:     /login
            success_handler: authentication_handler
            failure_handler: authentication_handler
            provider: fos_userbundle
        anonymous: true
        logout: true

もちろん、AJAX ログイン ボックスを作成する必要がある場合は、成功ハンドラーと失敗ハンドラーをオーバーライドし、要求が XmlHttpRequest であるかどうかを確認して、ログインの結果を返す必要があります。

于 2012-05-27T08:15:48.407 に答える
0

テンプレートを投稿できますか?

テンプレートでパスを正しく編集しましたか?

<form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}>

フォームを正しいコントローラーに送信したい。

于 2012-05-13T16:17:19.183 に答える