我正在使用身份验证的应用程序。我使用以下框架:
对于种子,我创建了一个DataSeeder
类,它在ConfigureServices
函数中添加为Transient Service,稍后在Configure函数中调用。它检查是否存在IdentityUser
,如果不存在,则会创建一个名为admin的管理员,并将角色Admin添加到其中。
但是,在向用户添加角色时,我得到一个异常,说明违反了外键约束,并且ASP_NET_USERS不包含具有该PK的条目。
我检查了数据库,它确实包含我创建的新角色,但用户表仍然是空的。
这是我的DataSeeder
课程:
public class DataSeeder {
private DatabaseContext _context;
private UserManager<IdentityUser> _userManager;
private RoleManager<IdentityRole> _roleManager;
public DataSeeder(DatabaseContext ctx, UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager) {
_context = ctx;
_userManager = userManager;
_roleManager = roleManager;
}
public async Task CreateUserAsync() {
if (! await _userManager.Users.AnyAsync()) {
var adminRole = new IdentityRole("admin");
var rootRole = new IdentityRole("root");
await _roleManager.CreateAsync(adminRole);
await _roleManager.CreateAsync(rootRole);
var user = new IdentityUser {
Email = "blabla@example.com",
EmailConfirmed = true,
UserName = "superadmin"
};
await _userManager.CreateAsync(user, "P@SSWORD");
await _userManager.AddClaimAsync(user, new Claim("role", "admin"));
}
}
}
因此AddClaimAsync
抛出了异常。任何帮助都会非常感激
答案 0 :(得分:1)
检查_userManager.createAsync
的结果。
var result = await _userManager.CreateAsync(user, "P@SSWORD");
if (!result.Succeeded)
{
// something went wrong, inspect the errors
}
您很可能发现IdentityUser
上的必需属性丢失或密码无效。