我正在尝试在登录后检查用户的电子邮件确认状态,然后直接指示他们。
基于这两个主题:
ASP.NET Core Identity - get current user
How get current user in asp.net core
我试过了:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
ClaimsPrincipal currentUser = this.User;
var thisUser = await _userManager.GetUserAsync(currentUser);
if(thisUser.EmailConfirmed)
{
return View("~/Views/Task/Index.cshtml");
}
else
{
return View("ConfirmEmail");
}
}
还有这个:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
var thisUser = await _userManager.GetUserAsync(HttpContext.User);
if(thisUser.EmailConfirmed)
{
return View("~/Views/Task/Index.cshtml");
}
else
{
return View("ConfirmEmail");
}
}
从控制器内部开始,thisUser
始终为空。
如何登录确认其电子邮件已确认并正确重定向?
答案 0 :(得分:2)
您的方法存在问题,Membership
和Identity
也是如此:它们基于cookies
。 Cookie只有在客户发送时才能读取。
所以,这是你的流程:
如上所述,这是错误的。你的流程应该是:
OR
email
答案 1 :(得分:0)
我在模型中收到了电子邮件,所以我只是直接在数据库中查找。
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
var user = _context.Users.Single(x => x.Email == model.Email);
if(user.EmailConfirmed)
{
return View("~/Views/Task/Index.cshtml");
}
else
{
return View("ConfirmEmail");
}
}
答案 2 :(得分:0)
来自docs:
通过调用UseAuthentication启用身份。使用验证 向请求管道添加身份验证middleware。
因此,在Configure
方法中,如果您忘记设置
app.UseAuthentication();
您将获得相同的结果,而不会出现任何错误。