2014-03-31 99 views
0

在我的登錄頁,我已經簽入這樣的代碼......在MVC 5,登錄後,身份仍然是未經驗證的

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 

然而,當我登入後立即檢查User.Identity,它仍然是未經驗證的

this.User.Identity.IsAuthenticated返回false。

我錯過了什麼?

回答

1

的this.User.Identity.IsAuthenticated是不正確的,直到下一個請求。在我的情況下,我重定向到Home/Index。一旦進入HomeController.Index()方法,我看到IsAuthenticated == true。

從這裏:http://msdn.microsoft.com/en-us/library/twk5762b.aspx

Forms身份驗證票證供應表單的身份驗證信息,由瀏覽器發出的一個請求。

+0

在對服務器的下一個請求中IsAuthenticated是否爲真? – caspian

+0

是的,它是「真實的」... 基於MSDN鏈接,我將此標記爲答案.. – addisu

0

我假設你正在使用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> 
    } 
+0

是的,這是正確的,我認爲IsAuthenticated是真的後, 「等待SignInAsync(用戶,model.RememberMe);」但它不是......爲什麼是......? – addisu