2015-06-08 109 views
3

我想知道什麼是用戶標識名稱,並將isAuthenticated更改爲true。什麼是User.Identity.Name和User.Identity.IsAuthenticated?

爲什麼User.Identity.Name一個空字符串和User.Identity.IsAuthenticatedfalseSignInManager.PasswordSignInAsync後重返Success

// POST: /Account/Login 
[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    var userIdentityNameTest = User.Identity.Name; // Empty string 

    var result = await SignInManager.PasswordSignInAsync(
              model.Email, model.Password, 
              model.RememberMe, shouldLockout: false); 
    // result is "Success" 

    userIdentityNameTest = User.Identity.Name; 
    // userIdentityNameTest is still an empty string? 
    // User.Identity.IsAuthenticated is still false? 

    switch (result) 
    { 
     case SignInStatus.Success: 
      return RedirectToLocal(returnUrl); 
     case SignInStatus.LockedOut: 
      return View("Lockout"); 
     case SignInStatus.RequiresVerification: 
      return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, 
               RememberMe = model.RememberMe }); 
     case SignInStatus.Failure: 
     default: 
      ModelState.AddModelError("", "Invalid login attempt."); 
      return View(model); 
    } 
} 

回答

4

似乎SignInManager.PasswordSignInAsync僅驗證輸入的數據,如果你不使用TwoFactorAuthentication運行AuthenticationManager.SignIn。在這種情況下,AuthenticationManager.SignIn僅將身份驗證Cookie設置爲響應。

因此,User.Identity可用於後續請求您的應用程序。要通過Name得到ApplicationUser可以使用ApplicationUserManager如下:

UserManager.FindByNameAsync(model.Name)

相關問題