Symfonyのユーザ認証

Askeetの5日目にあるログインフォームのサンプルでは

http://www.symfony-project.org/askeet/1_0/5
http://symfony.xrea.jp/askeet/5.html

  $this->getRequest()->setAttribute('referer', $this->getRequest()->getReferer()); 

リクエスト属性にrefererという名前でリファラを設定している。
この値は、loginSuccess.phpの中でhiddenのフォーム変数に展開される

 <?php echo input_hidden_tag('referer', $sf_request->getAttribute('referer')) ?>

認証のフォームをPOSTメソッドで受け取って、認証成功の場合、フォーム変数reffererに設定されたページにリダイレクトする。

  // redirect to last page
  return $this->redirect($this->getRequestParameter('referer', '@homepage'));

このサンプルだと、どこかのページに「ログイン」リンクなどがあって、認証後、そのページに戻る動作になっている。
URL直打ちでアクセスに来るケースで、これを認証後、そのURLにリダイレクトさせたい場合には、リファラは使えない。
この場合、getReferer()ではなくgetPathInfo()を使えばOK。

また、このサンプルだとパスワード認証がNGの場合、loginSuccess.phpでエラーが表示されるが、このときフォーム変数refererの値が落ちてしまうので、再設定する必要がある。