ASP.NET MVC 3网站用户管理的标准演示包括以下登录过程:
用户输入身份验证数据。
数据已发布到服务器。
处理身份验证尝试的代码通过DB检查提供的数据。
如果一切正常,请调用FormsAuthentication.SetAuthCookie
为来自浏览器的即将到来的会话请求设置cookie。
并将用户重定向到任何地方。
我想实现一个纯粹的jQuery.Ajax-ASP.NET登录机制。
我可以毫无问题地从js调用MVC网站操作。但是,如何从JS代码中手动获取FormsAuthentication.SetAuthCookie
cookie数据,并将其放入浏览器cookie存储中?如何在服务器上或jQuery.ajax成功代码中提取它们?
最佳答案
使用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>
关于asp.net - 使用JavaScript验证ASP.NET用户 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10542543/