1

Symfonyのアクションセキュリティでは、ユーザーが特定されていない場合、アプリケーションのsettings.ymlファイルで定義されているデフォルトのログインアクションに転送されます。ユーザーが正常に認証された後、最初に要求されたアクションにユーザーを転送するにはどうすればよいですか?

4

3 に答える 3

8

ログインアクションを最初にヒットしたときに、リファラーをユーザーセッションに保存します。

if(!$this->getUser()->hasParameter('referer'))
{
  $this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}

ログインが成功したら、ユーザーを保存されているリファラーにリダイレクトします。

$this->redirect($this->getUser()->getParameter('referer'));

sfGuardPluginに完全な例があります。

http://www.symfony-project.org/plugins/sfGuardPlugin

于 2008-12-12T21:39:04.203 に答える
1

もっと簡単に...

$this->getUser()->setReferer($this->getRequest()->getReferer());

お気に入り

setReferer($referer)
{
  if (!$this->hasAttribute('referer'))
    $this->setAttribute('referer', $referer);
}
于 2009-09-09T05:27:30.173 に答える
0

関連する問題ですが、代わりに別のアクションから転送を実行しようとしています。

リファラーにリダイレクトしようとしているsfGuardによって保護されているアクションがある場合、サインイン後にリダイレクトループが発生します。これは、sfGuardのサインインページがリファラーになるためです。上記のようにサインインアクションに保存されている場合、パラメータまたは属性を複数のリクエストに保存できます。つまり、すでにサインインしている場合、アクションが誤ったページにリダイレクトされる可能性があります。解決策は、忘れられるフラッシュを使用することです。これは、sfGuardAuthActionsのexecuteSigninメソッドの次のコードで実行できます。

if ($this->getUser()->hasFlash('referer'))
{
  $this->getUser()->setFlash('referer', $this->getUser()->getFlash('referer'));
}
else
{   
  $this->getUser()->setFlash('referer', $this->getRequest()->getReferer());
}

最初のブロックでフラッシュをリセットすることで、ログイン試行の合間にフラッシュを忘れることはなく、フラッシュを使用することで、他のページからのサインインがアクションの妨げになることはありません。

于 2011-07-28T17:53:34.653 に答える