Sto lavorando su un'applicazione con autenticazione. Sto usando i seguenti framework:
Per il seeding ho creato una classe DataSeeder
, che viene aggiunta come servizio transitorio nella funzione ConfigureServices
e successivamente chiamata nella funzione Configura. Controlla se esiste un IdentityUser
e, in caso contrario, ne crea uno chiamato admin e aggiunge il ruolo Admin ad esso.
Tuttavia, quando aggiungo il ruolo all'utente, ottengo un'eccezione dicendo che un vincolo di chiave esterna viene violato e che ASP_NET_USERS non contiene una voce con quel PK.
Ho controllato il database e in effetti contiene il nuovo ruolo che ho creato, ma la tabella degli utenti è ancora vuota.
Ecco la mia classe 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"));
}
}
}
Quindi l'eccezione viene lanciata su AddClaimAsync
. Qualsiasi aiuto sarebbe molto apprezzato
Controlla il risultato di _userManager.createAsync
.
var result = await _userManager.CreateAsync(user, "P@SSWORD");
if (!result.Succeeded)
{
// something went wrong, inspect the errors
}
Probabilmente troverai una proprietà richiesta su IdentityUser
mancante o la password non è valida.