使用Webmatrix和Razor的Websecurity注销链接

时间:2013-02-21 10:37:35

标签: razor security webmatrix

我正在创建一个主要基于WebMatrix 2提供的模板的应用程序。

一切都很好,虽然我在标题中创建了一个“注销”链接时遇到了一些问题。

目前我有以下链接:

<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("~/");
    }
}

但是当我点击此链接时,它什么也没做,我还在登录。我哪里出错?

1 个答案:

答案 0 :(得分: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来提交该表单的普通链接,从而使其看起来像是最终用户的普通链接,只有它们受到保护!