2

ASP.NET MVC 3 网站用户管理的标准演示包括以下登录过程:

  1. 用户输入身份验证数据。
  2. 数据发布到服务器。
  3. 处理身份验证尝试的代码检查提供的数据与 DB。
  4. 如果一切正常 - 调用FormsAuthentication.SetAuthCookie为来自浏览器的即将到来的会话请求设置 cookie。
  5. 并将用户重定向到任何地方。

我想实现一个纯粹的 jQuery.Ajax - ASP.NET 登录机制。

我可以毫无问题地从 js 调用 MVC 站点操作。但是如何FormsAuthentication.SetAuthCookie手动获取这些 cookie 数据,从 JS 代码将它们放入浏览器 cookie 存储中?如何在服务器或 jQuery.ajax 成功代码中提取它们?

4

3 回答 3

3

使用 MVC 3,您可以为登录按钮设置 onclick 事件,然后将 ajax POST 发送到登录操作。让登录操作返回 JSON 结果并控制从您的 javascript 函数发送用户的位置。

[HttpPost]
public JsonResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        //Do your authentication
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        return Json(true);
    }

// If we got this far, something failed, redisplay form
    return Json(false);
}

在您的视图中添加一个 Id 到您的表单并在按钮上放置一个点击处理程序。

<% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { Id = "frmLogOn" }))
   { %>
    <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")%>
    <div>
        <fieldset>
            <legend>Account Information</legend>

            <div class="editor-label">
                <%: Html.LabelFor(m => m.UserName)%>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(m => m.UserName)%>
                <%: Html.ValidationMessageFor(m => m.UserName)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(m => m.Password)%>
            </div>
            <div class="editor-field">
                <%: Html.PasswordFor(m => m.Password)%>
                <%: Html.ValidationMessageFor(m => m.Password)%>
            </div>

            <div class="editor-label">
                <%: Html.CheckBoxFor(m => m.RememberMe)%>
                <%: Html.LabelFor(m => m.RememberMe)%>
            </div>

            <p>
                <input type="submit" value="Log On" onclick="clicked(); return false;" />
            </p>
        </fieldset>
    </div>
<% } %>
<script type="text/javascript">
    function clicked() {
        var form = $('#frmLogOn');
        $.ajax({
            type: 'POST',
            url: '/Account/LogOn',
            data: form.serializeObject(),
            success: function (result) {
                if (result == true) {
                    alert("success");
                    window.top.location = "/Home/Index";
                }
                else {
                    alert("failure");
                }
            },
            error: function (data) {
                alert("error");
            }
        });
    }
</script>
于 2012-05-10T22:27:50.283 回答
0

安装 MVC4 测试版,默认的 Internet 模板提供了一种 Ajax 身份验证机制,您可以窃取并放入您的 MVC3 应用程序中。

或者只使用 MVC4,因为 MVC4 很可能会在接下来的几个月内发布。当前的 MVC4 测试版还有一个上线许可证,因此如果您愿意,您甚至可以使用它。

于 2012-05-10T21:43:53.270 回答
0

不是 jQuery - 在Microsoft Ajax中使用表单身份验证

于 2012-05-10T23:03:17.027 回答