0
我想解決我的Symfony 2應用程序中的這種不一致性:當用戶是而不是經過驗證的路徑/app/logout
重定向到/app/login
。相反,未通過身份驗證的用戶應查看錯誤頁面(可能爲403)。註銷路由中的Symfony 2不一致:註銷重定向到登錄?
以下是安全配置。該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);
}
一個解決辦法是從接入移除路線/app/logout
控件,然後拋出一個異常,如果用戶它不是完全認證:
if(false === $this->getSecurityContext()->isGranted('IS_AUTHENTICATED_FULLY'))
throw new AccessDeniedException();
但是這樣一來即使沒有經過身份驗證的用戶也可以訪問!有人知道更好的解決方案
使用註銷處理程序而不是自定義控制器操作會有什麼區別? – gremo 2012-07-25 10:09:46
這對Symfony來說更具有慣性。解決問題時使用內置解決方案;只有在沒有可用的滿意解決方案時才使用您的自定義代碼。如果在未來版本的Symfony中註銷邏輯發生變化會怎樣?你必須注意並更新你的代碼。如果你使用內置的東西,你不必打擾。 – 2012-07-25 10:58:49