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_password を hashed_password4 として選択します。ユーザー 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 を書き込む [] []
アドバイスをいただければ幸いです。
ありがとう。