0

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では、認証されていないユーザーからでもアクセスできます! 誰もがより良い解決策を知っていますか?

4

1 に答える 1

1

からログアウト パスを削除するだけaccess_controlです。認証されていないユーザーがログアウト ページにアクセスしても、何も問題は発生しません。安全です。このようなものを過度に設計しないでください。;)

ところで、Symfony のビルトイン ログアウト コントローラーを使用しないのはなぜですか? すべてのログアウト処理を自分で処理して車輪を再発明する代わりに、カスタム コードを配置するログアウト ハンドラを作成できます。

于 2012-07-25T04:34:55.633 に答える