C# Asp Net核心标识在登录页上获取用户id
在我的登录页面上的in Areas/Identity/Account/login 我有这个处理程序,我想记录哪个用户通过获取他的Id访问数据库。问题是即使签名结果成功,声明仍然是空的。我错过什么了吗?我知道我可以使用用户名在数据库中找到用户Id,但这只是一个额外的数据库调用,如果可能的话,我希望避免C# Asp Net核心标识在登录页上获取用户id,c#,asp.net-core,C#,Asp.net Core,在我的登录页面上的in Areas/Identity/Account/login 我有这个处理程序,我想记录哪个用户通过获取他的Id访问数据库。问题是即使签名结果成功,声明仍然是空的。我错过什么了吗?我知道我可以使用用户名在数据库中找到用户Id,但这只是一个额外的数据库调用,如果可能的话,我希望避免 public async Task<IActionResult> OnPostAsync(string returnUrl = null) {
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl ??= Url.Content("~/Account/Index");
if (!ModelState.IsValid)
{
_toast.AddErrorToastMessage("Dados inválidos.");
return Page();
}
// 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(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: false);
var user = await _signInManager.UserManager.GetUserAsync(User);
if (result.Succeeded)
{
_context.Accesses.Add(new Access
{
Description = "Login",
Machine = Environment.MachineName,
UserId = User.GetUserId(),
IpAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString()
});
try
{
await _context.SaveChangesAsync();
}
catch(DbUpdateException ex)
{
_logger.LogInformation(ex.InnerException.ToString());
}
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
_toast.AddErrorToastMessage("Username / Password Incorrecto(s).");
return Page();
// If we got this far, something failed, redisplay form
}
PostAsync上的公共异步任务(字符串returnUrl=null)
{
returnUrl???=Url.Content(“~/Account/Index”);
如果(!ModelState.IsValid)
{
_toast.AddErrorToast消息(“Dados inválidos.”);
返回页();
}
//这不会将登录失败计入帐户锁定
//要启用密码故障触发帐户锁定,请设置lockoutOnFailure:true
var result=wait _signInManager.PasswordSignInAsync(Input.UserName、Input.Password、Input.RememberMe、lockoutOnFailure:false);
var user=await\u signInManager.UserManager.GetUserAsync(用户);
if(result.successed)
{
_context.Access.Add(新访问
{
Description=“Login”,
Machine=Environment.MachineName,
UserId=User.GetUserId(),
IpAddress=Request.HttpContext.Connection.RemoteIpAddress.ToString()
});
尝试
{
wait_context.SaveChangesAsync();
}
捕获(DbUpdateException ex)
{
_logger.LogInformation(例如InnerException.ToString());
}
_logger.LogInformation(“用户登录”);
返回LocalRedirect(returnUrl);
}
_toast.AddErrorToast消息(“用户名/密码不正确”);
返回页();
//如果我们走到这一步,有些东西失败了,重新显示形式
}
而不是
_signInManager.UserManager.GetUserAsync(User);
试用
_signInManager.UserManager.FindByNameAsync(Input.UserName)