MVC JQuery身份验证不适用于单页面应用程序

时间:2013-09-11 01:50:26

标签: jquery asp.net-mvc forms-authentication

我有一个签到表格,

@if (@User.Identity.IsAuthenticated)
{
   <div>Welcome @User.Identity.Name</div> 
}
else
{
    <input type="text" id="username" name="username" placeholder="" class="input-xlarge">
    <input type="password" id="password" name="password" placeholder="" class="input-xlarge">
    <button id="loginBtn" class="btn btn-success">Login</button>
}

一些JQuery,

$("#loginBtn").click(function () {
    Authenticate();            
});

function Authenticate() {
    $.post("/Home/Authenticate", { username: "John", password: "test" }, function (data) {
        $('#loginArea').replaceWith(data);
    });
}

一些服务器端代码来处理请求。

[HttpPost]
    public ActionResult Authenticate(string username, string password)
{

    var ticket = new FormsAuthenticationTicket(
        1,
        username,
        DateTime.Now,
        DateTime.Now.AddDays(5),
        true,
        string.Empty,
        FormsAuthentication.FormsCookiePath);

    var encTicket = FormsAuthentication.Encrypt(ticket);

    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

    return PartialView("_login");
}

奇怪的是,这是有效的,但不是最初的通话。即使通过用户身份验证,也不会更新返回的视图。如果我刷新页面,一切都按预期工作。问题是,这是一个单页面应用程序,我真的不想强制页面刷新..

返回的PartialView没有呈现“欢迎”文本的原因吗?

1 个答案:

答案 0 :(得分:0)

仅对后续请求进行身份验证,因为它们在请求中包含表单身份验证Cookie。

因此,在初始调用时,我需要注意不要使用当前的Principal。