2

Symfony 2 のチュートリアルを始めたところです。ユーザー クラスを含むバンドルを作成し、指示に従ってログイン プロセスを設定しようとしました。もうすぐそこにいると思いますが、現在、最後のハードルに落ちています。

バンドルをセットアップしました: Dan\AuthBundle にはユーザー クラスが含まれ、別のバンドル: Dan\HelloBundle にはログインしているユーザーのみがアクセスできるようにします。

私の security.yml ファイルは次のとおりです。

security:
    encoders:
        Dan\AuthBundle\Entity\User: sha512

    providers:
        main:
            entity: { class: Dan\AuthBundle\Entity\User, property: username }
        administrators:
            entity: { class: DanAuthBundle:User }

    firewalls:
        secured_area:
            pattern:    ^/*
            form_login:
                check_path: /login_check
                login_path: /login
                always_use_default_target_path: false
                default_target_path: /hello

    access_control:
        - { path: ^/hello/.* }

メインの routing.yml ファイルは次のようになります。

DanAuthBundle:
    resource: "@DanAuthBundle/Resources/config/routing.yml"
    prefix:   /auth/

DanHelloBundle_homepage:
pattern:  /hello/
defaults: { _controller: DanHelloBundle:Default:index }

login:
    pattern: /login
    defaults: {_controller: DanAuthBundle:Default:login }

login_check:
    pattern: /login_check

ユーザー クラスのインスタンスを手動でいくつか作成しました。

URL /hello にアクセスしようとすると、正しくログイン ページにリダイレクトされます。間違った詳細を入力すると、テンプレートに正しいメッセージが配信されますが、正しい詳細でログインすると、324 (空の応答) エラーが返されます (このとき、ブラウザーに表示される URL login_check です)。

ドキュメントを読んで、最初にアクセスしようとしていたページにリダイレクトする必要があると思いましたか?

http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

デフォルトでは、送信された資格情報が正しい場合、ユーザーは要求された元のページ (例: /admin/foo) にリダイレクトされます。ユーザーが最初にログイン ページに直接アクセスした場合は、ホームページにリダイレクトされます。これは高度にカスタマイズできるため、たとえば、ユーザーを特定の URL にリダイレクトできます。

また、正しい情報を入力してページにアクセスしようとすると、再度ログイン ページにリダイレクトされます。

明らかな何かを見逃したかどうか、誰でも見ることができますか?

これは私のログファイルからのものです:

[2012-06-18 18:33:47] doctrine.DEBUG: t0.id を id1 として、t0.username を username2 として、t0.salt を salt3 として、t0.hashed_pa​​ssword を hashed_pa​​ssword4 として選択します。ユーザー t0 WHERE t0.username = ? (["hello"]) [] [] [2012-06-18 18:33:47] security.INFO: ユーザー「hello」が正常に認証されました [] [] [2012-06-18 18:33:47 ] event.DEBUG: リスナー "Symfony\Component\Security\Http\Firewall::onKernelRequest" がイベント "kernel.request" の伝播を停止しました。[] [] [2012-06-18 18:33:47] event.DEBUG: リスナー "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener" は、イベント "kernel.request" に対して呼び出されませんでした。[] [] [2012-06-18 18:33:47] event.DEBUG: リスナー "Symfony\Bundle\AsseticBundle\EventListener\RequestListener" は、イベント "kernel.request" に対して呼び出されませんでした。[] [] [2012-06-18 18:33:47] event.DEBUG: イベント「kernel.response」をリスナー「Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse」に通知しました。[] [] [2012-06-18 18:33:47] security.DEBUG: セッションに SecurityContext を書き込む [] []

アドバイスをいただければ幸いです。

ありがとう。

4

3 に答える 3

4

2人のリスナーが必要です。

  • セッションの最後のページで設定するもの

  • 正常なログイン後にリダイレクトする2番目

そのリンクはあなたの問題を解決します:http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

于 2012-06-18T10:01:41.980 に答える