Sql server .Net核心标识种子数据:无法使用种子凭据登录
我有我的初始化设置,一切似乎都正常运行,所有细节都保存到数据库中,但当我尝试通过webapp登录时,每次都失败。当我在登录控制器中运行调试器时,它在命中后返回{Failed}:Sql server .Net核心标识种子数据:无法使用种子凭据登录,sql-server,database,entity-framework,asp.net-core,asp.net-identity,Sql Server,Database,Entity Framework,Asp.net Core,Asp.net Identity,我有我的初始化设置,一切似乎都正常运行,所有细节都保存到数据库中,但当我尝试通过webapp登录时,每次都失败。当我在登录控制器中运行调试器时,它在命中后返回{Failed}: var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false); 初始化器: public class DbInitialiser
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
初始化器:
public class DbInitialiser : IDbInitialiser
{
private readonly ApplicationDbContext _db;
private readonly UserManager<IdentityUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public DbInitialiser(UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager, ApplicationDbContext db)
{
_db = db;
_userManager = userManager;
_roleManager = roleManager;
}
public void Initialise()
{
try
{
if (_db.Database.GetPendingMigrations().Count() > 0)
{
_db.Database.Migrate();
}
}
catch (Exception ex)
{
}
if (_db.Roles.Any(r => r.Name == "Admin")) return;
_roleManager.CreateAsync(new IdentityRole("Admin")).GetAwaiter().GetResult();//makes sure this executes before proceceding with anything else
_roleManager.CreateAsync(new IdentityRole("Manager")).GetAwaiter().GetResult();
_userManager.CreateAsync(new Employee
{
UserName = "Admin",
Email = "admin@gmail.com",
EmailConfirmed = true,
TwoFactorEnabled = false,
PhoneNumberConfirmed = true
//can set other properties, this is for the initial setup
}, "Abc123!Abc123!").GetAwaiter().GetResult();
IdentityUser user = _db.Users.Where(u => u.Email == "admin@gmail.com").FirstOrDefault();
_userManager.AddToRoleAsync(user, "Admin").GetAwaiter().GetResult();
}
public类DbInitialiser:IDbInitialiser
{
私有只读应用程序dbContext_db;
私有只读用户管理器_UserManager;
专用只读角色管理器(RoleManager);
公共数据库初始化器(UserManager UserManager、RoleManager RoleManager、ApplicationDbContext数据库)
{
_db=db;
_userManager=userManager;
_roleManager=roleManager;
}
公开无效初始化()
{
尝试
{
如果(_db.Database.GetPendingMigrations().Count()>0)
{
_db.Database.Migrate();
}
}
捕获(例外情况除外)
{
}
if(_db.Roles.Any(r=>r.Name==“Admin”))返回;
_roleManager.CreateAsync(新的IdentityRole(“Admin”)).GetAwaiter().GetResult();//确保在处理任何其他操作之前执行此操作
_CreateAsync(新的IdentityRole(“管理器”)).GetAwaiter().GetResult();
_userManager.CreateAsync(新员工
{
UserName=“Admin”,
电子邮件=”admin@gmail.com",
emailconfirm=true,
TwoFactorEnabled=false,
phonenumberconfirm=true
//可以设置其他属性,这是用于初始设置的
},“Abc123!Abc123!”).GetAwaiter().GetResult();
IdentityUser user=_db.Users.Where(u=>u.Email==”admin@gmail.com“”。FirstOrDefault();
_userManager.AddToRoleAsync(user,“Admin”).GetAwaiter().GetResult();
}
(我的员工类扩展了IdentityUser)
我已经检查了其他类似帖子中提到的所有密码要求,因此我知道这与此无关,当我检查SSM时,该用户的所有数据都在aspnetusers中,因此我不确定为什么它不允许我登录到种子管理员用户
当我在登录控制器中运行调试器时,它返回{Failed}
在中,我们可以发现它将根据提供的用户名检查用户
public virtual async Task<SignInResult> PasswordSignInAsync(string userName, string password,
bool isPersistent, bool lockoutOnFailure)
{
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
return SignInResult.Failed;
}
return await PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);
}
如果您通过注册页面注册用户,然后使用新注册的帐户登录,效果如何?啊,我太傻了。电子邮件原本是用户名,但我在玩,前几天更改了。谢谢!
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 user = await _userManager.FindByEmailAsync(Input.Email);
//var istrue = await _userManager.CheckPasswordAsync(user, Input.Password);
var result = await _signInManager.PasswordSignInAsync(user, Input.Password, Input.RememberMe, lockoutOnFailure: true);
//var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);