1

主にWebMatrix2で提供されるテンプレートに基づいてアプリケーションを作成しています。

ヘッダーに「ログアウト」リンクを作成する際に問題が発生していますが、すべてが正常に機能しています。

現在、私は次のリンクを持っています:

<a href="~/account/logout.cshtml">Sign Out</a>

次に、このページに移動します。

@{
    WebSecurity.RequireAuthenticatedUser();

    if (IsPost) {
        // Verify the request was submitted by the user
        AntiForgery.Validate();

        // Log out of the current user context
        WebSecurity.Logout();

        // Redirect back to the return URL or homepage
        var returnUrl = Request.QueryString["ReturnUrl"];
        Context.RedirectLocal(returnUrl);
    } else {
        Response.Redirect("~/");
    }
}

しかし、このリンクをクリックしても何も起こらず、まだログインしています。どこが間違っているのでしょうか。

4

1 に答える 1

2

問題は、デフォルトでログアウト リンクが検証済みの POST リクエストである (そして検証済みである必要がある) ことです。これは、ユーザーをログアウト ページにリダイレクトすることにより、ユーザーをログアウトさせる XSS 攻撃を防ぐためです。

このコードのおかげで:

if (IsPost) {
    // Verify the request was submitted by the user
    AntiForgery.Validate();

.. 次のように、ログアウト用のフォームを作成する必要があります。

<form method="post" action="~/account/logout.cshtml">
    @AntiForgery.GetHtml()
    <input type="submit" value="Logout" />
</form>

もちろん、JavaScript を使用して通常のリンクからそのフォームを送信することもできます。したがって、エンド ユーザーには通常のリンクのように見えますが、保護されているだけです!

于 2013-02-21T10:44:04.787 に答える