在我的登錄頁,我已經簽入這樣的代碼......在MVC 5,登錄後,身份仍然是未經驗證的
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
然而,當我登入後立即檢查User.Identity,它仍然是未經驗證的
this.User.Identity.IsAuthenticated
返回false。
我錯過了什麼?
在我的登錄頁,我已經簽入這樣的代碼......在MVC 5,登錄後,身份仍然是未經驗證的
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
然而,當我登入後立即檢查User.Identity,它仍然是未經驗證的
this.User.Identity.IsAuthenticated
返回false。
我錯過了什麼?
的this.User.Identity.IsAuthenticated是不正確的,直到下一個請求。在我的情況下,我重定向到Home/Index。一旦進入HomeController.Index()方法,我看到IsAuthenticated == true。
從這裏:http://msdn.microsoft.com/en-us/library/twk5762b.aspx
Forms身份驗證票證供應表單的身份驗證信息,由瀏覽器發出的一個請求。
我假設你正在使用ASP.NET身份。這裏是一個工作模板,看看代碼中有什麼不同。
型號:
public class LoginViewModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
控制器:
//
// GET: /My/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
//
// POST: /My/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid account name or password.");
}
}
return View(model);
}
頁:
@using (Html.BeginForm("Login", "My", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<hr />
@Html.ValidationSummary(false)
<div class="form-group">
<p class="col-md-2 control-label"><strong>Account</strong></p>
<div class="col-md-10">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Password)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Log in" class="btn btn-default" /> | @Html.ActionLink("Cancel", "Index", "Explore")
</div>
</div>
}
是的,這是正確的,我認爲IsAuthenticated是真的後, 「等待SignInAsync(用戶,model.RememberMe);」但它不是......爲什麼是......? – addisu
在對服務器的下一個請求中IsAuthenticated是否爲真? – caspian
是的,它是「真實的」... 基於MSDN鏈接,我將此標記爲答案.. – addisu