我正在创建一个主要基于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("~/");
}
}
但是当我点击此链接时,它什么也没做,我还在登录。我哪里出错?
答案 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来提交该表单的普通链接,从而使其看起来像是最终用户的普通链接,只有它们受到保护!