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の値が落ちてしまうので、再設定する必要がある。