J'utilise l'identité ASP.NET Core 2.1. J'ai remplacé IdentityUser car je dois ajouter des propriétés supplémentaires à l'utilisateur.
Dans Startup.cs
services.AddDefaultIdentity<PortalUser>().AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext.cs
public partial class ApplicationDbContext : IdentityDbContext<PortalUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
PortalUser class
public class PortalUser : IdentityUser
{
[PersonalData]
public DateTime? LastLoginDateUtc { get; set; }
[PersonalData]
public DateTime? RegistrationDateUtc { get; set; }
}
Tout fonctionne bien. Je peux ajouter un utilisateur via.
_userManager.CreateAsync(user)
Cependant, lorsque j'appelle AddToRolesAsync pour ajouter un rôle à un utilisateur, j'obtiens une exception. Des idées pourquoi?
_userManager.AddToRolesAsync(user, new List<string> { roleName });
{System.NotSupportedException: Store does not implement IUserRoleStore<TUser>.
at Microsoft.AspNetCore.Identity.UserManager`1.GetUserRoleStore()
at Microsoft.AspNetCore.Identity.UserManager`1.AddToRolesAsync(TUser user, IEnumerable`1 roles)}
Dans Startup.cs, je manquais AddRoles donc
services.AddDefaultIdentity<PortalUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
devrait être
services.AddDefaultIdentity<PortalUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
Remarque: la commande est critique. AddRoles
doit précéder AddEntityFrameworkStores
Car il n'y a pas de réponses sur la solution dans asp.net Core 2.2 , je voudrais partager la même erreur que je rencontre dans asp.net Core 2.2
Tout d'abord, voici une autre solution pour la même erreur dans asp.net core 2.1 https://github.com/aspnet/AspNetCore. Docs/issues/868
Et grâce à l'idée de l'auteur, je rencontre le problème lorsque je suis le guide officiel dans asp.net core 2.2 (l'url est ici: - MicrosoftDocs pour asp.net core 2.2 ). Lorsque je termine l'étape qu'il dit et que j'essaie d'exécuter le projet, il lève une exception "Store n'implémente pas IUserRoleStore"
et le problème est: en fait, c'est l'exemple pour asp.net core 2.1 (Et je doute fortement que la raison pour laquelle Microsoft fournira aux utilisateurs une documentation sans aucun exemple de code, ce qui n'a probablement pas de sens)
Et vous constaterez que, dans Zones/Identité/Données/IdentityHostingStartup.cs IdentityHostingStartup :: Configure, méthode , vous avez les codes suivants:
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
qui est le même que le code que vous devez ajouter dans /Program.cs ConfigureService comme étape: Ajouter des services de rôle à Identité dans les documents mentionnés:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
donc si vous rencontrez le même problème dans asp.net core 2.2, une solution alternative est:
remplacer la rangée
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
avec
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
dans Zones/Identité/Données/IdentityHostingStartup.cs IdentityHostingStartup :: Configure , mais ne l'ajoutez pas dans program.cs (le fichier ne peut pas être supprimé dans asp.net core 2.2)
Le projet que j'utilise Asp.net Identity sera mis à jour plus tard dans mes dépôts: WPHelper , Good Luck :)
Je sais que l'auteur a déjà résolu son problème, mais je vais l'ajouter pour toute autre personne qui a effectué toutes les étapes de la réponse ci-dessus et qui a toujours cette erreur.
Vous devez supprimer la méthode IdentityHostingStartup.Configure générée automatiquement dans Areas/Identity/IdentityHostingStartup.cs