为什么我不能使用新植入的高级用户(Asp.Net 核心身份)登录?
Why can't I log in with the newly seeded power user (Asp.Net Core Identity)?
我有一个带有 Identity 的 Asp.Net Core 3.1 网络应用程序。我使用此代码将高级用户播种到数据库:
var poweruser = new ApplicationUser
{
UserName = Configuration.GetSection("AppSettings")["UserName"],
Email = Configuration.GetSection("AppSettings")["UserEmail"],
FirstName = Configuration.GetSection("AppSettings")["UserFirstName"],
LastName = Configuration.GetSection("AppSettings")["UserLastName"],
PhoneNumber = Configuration.GetSection("AppSettings")["UserPhoneNumber"]
};
string userPassword = Configuration.GetSection("AppSettings")["UserPassword"];
var user = await UserManager.FindByEmailAsync(Configuration.GetSection("AppSettings")["UserEmail"]);
if (user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, userPassword);
if (createPowerUser.Succeeded)
{
await UserManager.AddToRoleAsync(poweruser, "SiteAdmin");
}
}
在 appsettings.json
中,"AppSettings" 部分如下所示:
"AppSettings": {
"UserName": "ab@cd.ef",
"UserEmail": "ab@cd.ef",
"UserFirstName": "Admin",
"UserLastName": "Admin",
"UserPhoneNumber": "12345678",
"UserPassword": "pa5sw&Rd"
}
在数据库中创建用户:
但是当我尝试登录时,登录尝试失败。我见过 and this 类似 post,但在那些情况下,用户名和电子邮件地址并不相同。就我而言,它们是 (ab@cd.ef)。我从 appsettings.json 复制粘贴了密码,以确保我没有输入错误。
更新
这是接收登录表单的方法(Login.cshtml.cs):
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
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(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
当一个难题的解决方案变得简单时,你不讨厌吗?
在这种情况下,只需将 PhoneNumberConfirmed
设置为 true
,我就可以登录了...
我有一个带有 Identity 的 Asp.Net Core 3.1 网络应用程序。我使用此代码将高级用户播种到数据库:
var poweruser = new ApplicationUser
{
UserName = Configuration.GetSection("AppSettings")["UserName"],
Email = Configuration.GetSection("AppSettings")["UserEmail"],
FirstName = Configuration.GetSection("AppSettings")["UserFirstName"],
LastName = Configuration.GetSection("AppSettings")["UserLastName"],
PhoneNumber = Configuration.GetSection("AppSettings")["UserPhoneNumber"]
};
string userPassword = Configuration.GetSection("AppSettings")["UserPassword"];
var user = await UserManager.FindByEmailAsync(Configuration.GetSection("AppSettings")["UserEmail"]);
if (user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, userPassword);
if (createPowerUser.Succeeded)
{
await UserManager.AddToRoleAsync(poweruser, "SiteAdmin");
}
}
在 appsettings.json
中,"AppSettings" 部分如下所示:
"AppSettings": {
"UserName": "ab@cd.ef",
"UserEmail": "ab@cd.ef",
"UserFirstName": "Admin",
"UserLastName": "Admin",
"UserPhoneNumber": "12345678",
"UserPassword": "pa5sw&Rd"
}
在数据库中创建用户:
但是当我尝试登录时,登录尝试失败。我见过
更新
这是接收登录表单的方法(Login.cshtml.cs):
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
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(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
当一个难题的解决方案变得简单时,你不讨厌吗?
在这种情况下,只需将 PhoneNumberConfirmed
设置为 true
,我就可以登录了...