簡體   English   中英

Symfony 2注銷路由不一致:注銷重定向到登錄?

[英]Symfony 2 inconsistency in logout route: logout redirect to login?

我想在我的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);
}

一種解決方案是從訪問控制中刪除路由/app/logout ,然后在用戶未完全通過身份驗證時拋出異常:

if(false === $this->getSecurityContext()->isGranted('IS_AUTHENTICATED_FULLY'))
    throw new AccessDeniedException();

但是,即使未經身份驗證的用戶也可以訪問/app/logout 有人知道更好的解決方案嗎?

只需從access_control刪除注銷路徑。 如果未經身份驗證的用戶轉到注銷頁面,則不會有任何不好的事情-這是安全的。 不要過度設計這些東西。 ;)

順便說一句,為什么不使用Symfony的內置注銷控制器? 您可以創建一個注銷處理程序以將自定義代碼放入其中,而不是通過自己處理所有注銷內容來重新發明輪子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM