Symfony 2 アプリケーションでこの矛盾を解決したいと思います: ユーザーが認証されていない場合、パスは/app/logout
にリダイレクトされ/app/login
ます。代わりに、認証されていないユーザーはエラー ページ (おそらく 403) を表示する必要があります。
セキュリティ設定はこちら。IS_AUTHENTICATED_FULLY
ユーザーは以前に完全に認証されている場合にのみログアウトできるため、これは必須のようです。
access_control:
- { path: ^/app/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/app/logout, roles: IS_AUTHENTICATED_FULLY }
そして私のログアウトアクションAccessController
:
/**
* @Extra\Route("logout")
* @Extra\Template
*/
public function logoutAction()
{
// Set the token to null and invalidate the session
$this->getSecurityContext()->setToken(null);
$this->getSession()->invalidate();
// Redirect url and seconds (window.location)
$seconds = 5;
$redirect = $this->getRouter()->generate('access_login');
return array('seconds' => $seconds, 'redirect' => $redirect);
}
1 つの解決策は、ルート/app/logout
をアクセス制御から削除し、ユーザーが完全に認証されていない場合に例外をスローすることです。
if(false === $this->getSecurityContext()->isGranted('IS_AUTHENTICATED_FULLY'))
throw new AccessDeniedException();
しかし、この方法/app/logout
では、認証されていないユーザーからでもアクセスできます! 誰もがより良い解決策を知っていますか?