"개별 사용자 계정"으로 기본 ASP.NET 코어를 만든 후 로그인 동작에서 User 개체의 "id"값을 얻으려고하고 있으며 항상 null을 반환합니다. 라인은 (VAR objUser = User.Claims.FirstOrDefault()를 값입니다.)입니다 홈/인덱스와 같은 다른 작업에서 액세스 할 때User.Claims.FirstOrDefault(). 로그인 작업 (ASP.NET ID 3)에서 값이 null입니까?
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
var objUser = User.Claims.FirstOrDefault().Value;
_logger.LogInformation(1, "User logged in.");
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning(2, "User account locked out.");
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
사용자 개체가
public IActionResult Index()
{
var x = User.Claims.FirstOrDefault().Value;
return View();
}
거기가 null는 아니고, 결과 후 Login Action에서 User 객체를 가지는 방법 .Succeeded?
덕분에, AG
왜 FirstOrDefault()의'.Value'를 사용하고 있습니까? 오류/예외가 있습니까? 확실히 당신은'var x = User.Claims.FirstOrDefault(); '할 수 있습니다.'FirstOrDefault()'메소드는 객체를 찾으면 객체를 반환하고 그렇지 않으면'null'을 반환합니다. 그렇다면'null' 체크 만하면됩니다 :'if (x! = null) {...}'. –
또는 한 줄에'x'를 지정하려면 C# 6.0에서 null 전파를 사용할 수 있습니다.'var x = User.Claims.FirstOrDefault() ?. Value;' –
'User'는 로그인 동작시 항상 null입니다. 다른 작업에서는 null이 아닙니다. – AG70