ASP.NET Core 2.1 Identityを使用しています。ユーザーにいくつかの追加プロパティを追加する必要があるため、IdentityUserをオーバーライドしました。
Startup.csで
services.AddDefaultIdentity<PortalUser>().AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext.cs
public partial class ApplicationDbContext : IdentityDbContext<PortalUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
PortalUserクラス
public class PortalUser : IdentityUser
{
[PersonalData]
public DateTime? LastLoginDateUtc { get; set; }
[PersonalData]
public DateTime? RegistrationDateUtc { get; set; }
}
それはすべて正常に動作しています。経由でユーザーを追加できます。
_userManager.CreateAsync(user)
ただし、AddToRolesAsyncを呼び出してユーザーにロールを追加すると、例外が発生します。なぜアイデアがありますか?
_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)}
Startup.csでは、AddRolesが欠落していました。
services.AddDefaultIdentity<PortalUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
あるべき
services.AddDefaultIdentity<PortalUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
注:順序は重要です。 AddRoles
はAddEntityFrameworkStores
の前に来る必要があります
asp.net Core 2.2にソリューションに関する回答がないため、私が出会った同じエラーを共有したいと思いますasp.net Core 2.2
最初に、asp.net core 2.1https://github.com/aspnet/AspNetCore。 Docs/issues/868
そして、著者のアイデアのおかげで、asp.net core 2.2の公式ガイダンスに従うと問題が発生します(URLはここにあります- asp.net core 2.2のMicrosoftDocs )。彼が言うステップを完了してプロジェクトを実行しようとすると、例外がスローされます「StoreはIUserRoleStoreを実装していません」
問題は、実際には、これはasp.netコア2.1のサンプルです(そして、Microsoftがユーザーにサンプルコードを持たないドキュメントをユーザーに提供する理由はおそらく疑わしいでしょうが、おそらく意味をなさないでしょう)
そして、Areas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup :: Configure methodには次のコードがあることがわかります:
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
これは、ステップとして/ Program.cs ConfigureServiceに追加するコードと同じです:Add Role services to記載されているドキュメントのIdentity:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
したがって、asp.net core 2.2で同じ問題に遭遇した場合、代替ソリューションは:です
行を置き換える
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
と
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
inAreas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup :: Configureメソッドですが、program.csには追加しません(ファイルは削除できません) asp.netコア2.2)
Asp.net Identityを使用するプロジェクトは、リポジトリの後半で更新されます。 WPHelper 、幸運:)
著者がすでに問題を修正していることは知っていますが、上記の回答のすべてのステップを実行し、まだこのエラーが残っている他の人にはこれを追加します。
Areas/Identity/IdentityHostingStartup.csで自動生成されたIdentityHostingStartup.Configureメソッドを削除する必要があります