使用ASP.NET MVC实现jQuery表单认证

24

能否使用 jQuery ajax 调用在 ASP.NET MVC 中进行表单身份验证?我找不到这样的示例。

更具体地说,我如何在页面上设置身份验证 cookie(而无需重定向),以便可以进行连续的经过身份验证的 ajax 请求?

2个回答

18

是的,这是可能的。 只需使用Mike Bosch在此处描述的方法提交登录表单,并返回一个包含任何返回URL的JSON数据结构。

我创建了一个轻量级的LoginResultDTO类,作为JSON返回:

public class LoginResultDTO
{
  public bool Success {get;set;}
  public string Message {get;set;}
  public string ReturnUrl {get;set;}
}

这是我 LogOn 视图中的脚本块:

<script type="text/javascript">
        $(document).ready(function() {
            var form = $($("form")[0]);
            form.submit(function() {
                var data = form.serialize();
                $.post(form.attr("action"), data, function(result, status) {
                    if (result.Success && result.ReturnUrl) {
                            location.href = result.ReturnUrl;
                    } else {
                        alert(result.Message);
                    }
                }, "json");
                return false;
            });
        });
</script>

这将对登录表单进行ajax包装。请注意,这是可能的javascript代码的最简单实现,但这是一个开始的地方。

然后我修改了我的AccountController中的LogOn操作,并在相关位置放置了类似以下内容的内容:

if(Request.IsAjaxRequest())
{
  return Json(new LoginResultDTO{Success=true,Message="Successfully logged in"});
}else
{
  return View();
}

这是一个超轻量级但相当完整的jquery身份验证在asp.net mvc中实现的示例。


如果我没有进行重定向,那么认证 cookie 如何在该页面上设置? - user60596
当ajax post返回成功结果时,一切都很好。但是在成功登录后,你几乎总是会重定向。在ajax场景中,通过在javascript中将url分配给location.href属性来实现重定向。 - Christian Dalager
我刚刚启动了Firebug来查看发生了什么。当您使用ajax点击LogOn操作并且您的登录成功时,响应头中有一个set-cookie条目,其中包含auth cookie。这就是为什么它能够正常工作的原因。 - Christian Dalager
但是这不能与 $.getJSON 一起使用... 而这是使跨站身份验证工作的唯一方法... 你如何处理这个问题? - Jalal El-Shaer

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接