【发布时间】:2014-09-29 21:52:07
【问题描述】:
当从客户端通过 AJAX 调用在 WebAPI 控制器中调用此方法时,会返回 200 代码,但用户会在页面刷新时重新进行身份验证。我做错了什么?
[HttpPost]
[Route("logout")]
public IHttpActionResult Logout() {
AuthenticationManager.SignOut();
}
这在标准 MVC 控制器中作为 ActionResult 和完整页面视图工作,但不能通过 AJAX 工作。
【问题讨论】:
-
我不确定,但我猜测进行 AJAX 调用的 JS 正在使用 cookie 的副本,需要处理来自服务器的响应,然后更新/销毁客户端上的原始 cookie。
-
可以添加响应状态码试试吗? Response.StatusCode = 303; AuthenticationManager.SignOut();
-
附带说明,我建议您加入
AntiForgeryToken以防止出现CSRF 问题。 -
Rowan,我经常在示例中看到 AntiForgeryToken。 CSRF 真的是注销的问题吗?攻击者可以使用注销方法进行更险恶的事情吗?
-
@adam0101,没错,但客户端上的 cookie 似乎并没有消失。我已经尝试了一些东西,但接下来将尝试来自 Deepu 的 303 状态码。我可能会放弃并制作传统的页面导航类型的注销。
标签: ajax asp.net-mvc asp.net-web-api asp.net-mvc-5