1

基本的に私が達成しようとしているのは、ソナタ e コマースで使用される fos ユーザー実装であるソナタ ユーザーに基づいて新しいログイン フォームを作成することです。新しいログイン フォームは元のログイン フォームと同じように動作するはずですが、レイアウトが異なります。

私がしたこと:
- 新しい小枝ファイルを作成しました
- ルーティングを追加しました:

m2m_partner:
resource: "@ApplicationSonataUserBundle/Resources/config/routing/partnerlogin.xml"
prefix: /partner

コンテンツ:

<route id="m2m_partner_login" pattern="/login">
<default key="_controller">ApplicationSonataUserBundle:Partner:login</default>
</route>

-security.yml に新しいファイアウォールを追加 ('admin' のものとかなり似ています)

    partner:
        pattern:      /partner(.*)
        context:        user
        form_login:
            provider:       fos_userbundle
            login_path:     /partner/login
            use_forward:    false
            check_path:     /partner/login_check
            failure_path:   null
        logout:
            path: /partner/logout
            invalidate_session: false
            handlers: ['sonata.page.cms_manager_selector']
        anonymous:    true
        switch_user: true

その後、適切な資格情報を入力すると正常にログインしますが、不適切な資格情報を入力すると、/partner/login ではなく /login にリダイレクトされ、「資格情報が正しくありません」というメッセージが表示されます。どうすれば修正できますか?私は何かを逃していますか?

編集1:
管理者ログインがどのように行われているかを確認し、フォームアクションが通常のログインとは異なるコントローラーに移動することを発見しました。これは、fosユーザーの「チェック」アクションとまったく同じように見えます:

    public function checkAction()
{
    throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.');
}

私はそれをコントローラーにコピーしましたが、この後、フォームを送信して資格情報が正しくない場合、次のエラーが表示されます。

 You must configure the check path to be handled by the firewall using form_login in your security firewall configuration. 
4

2 に答える 2

1

firewals 要素の順序を確認します。パートナーはメインセクションの上にある必要があります

 firewalls:
      partner:
         pattern:      /partner(.*)
         ......



      main:
       .....
于 2014-12-17T13:07:22.690 に答える
1

failure_path を新しいルートに変更する必要があります。

  form_login:
        failure_path:   /partner/login

または

  form_login:
        failure_path:   m2m_partner_login

2 番目の方法は、URL の代わりにルート名を使用するため、よりクリーンです。したがって、xml の URL を変更しても、ファイアウォールが壊れることはありません。

http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-on-login-failure

failure_path を指定しないと、デフォルトの失敗パス (/login) にフォールバックすると思います。

編集1:

ルート xml に追加する必要があります。

<route id="m2m_partner_login_check" pattern="/login_check">
    <default key="_controller">ApplicationSonataUserBundle:Partner:check</default>
    <requirement key="_method">POST</requirement>
</route>

<route id="m2m_partner_logout" pattern="/logout">
    <default key="_controller">ApplicationSonataUserBundle:Partner:logout</default>
</route>

多分これは例外を修正します。

于 2014-12-11T13:33:55.943 に答える