我有一个签到表格,
@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没有呈现“欢迎”文本的原因吗?
答案 0 :(得分:0)
仅对后续请求进行身份验证,因为它们在请求中包含表单身份验证Cookie。
因此,在初始调用时,我需要注意不要使用当前的Principal。