0

我有一个签到表,

@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 没有呈现“欢迎”文本是否有原因?

4

1 回答 1

0

只有后续请求会被验证,因为它们在请求中包含表单验证 cookie。

所以在最初的通话中,我需要小心不要使用当前的 Principal。

于 2013-09-12T01:28:26.420 回答