it-swarm.dev

저장소가 IUserRoleStore <TUser> ASP.NET Core 2.1 ID를 구현하지 않음

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)}
11
John81

Startup.cs에서 AddRoles가 누락되었습니다.

services.AddDefaultIdentity<PortalUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

해야한다

services.AddDefaultIdentity<PortalUser>()
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

참고 : 순서는 중요합니다. AddRoles이 (가) AddEntityFrameworkStores 앞에 와야합니다.

35
John81

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 core 2.1의 샘플입니다 (그리고 Microsoft가 사용자에게 샘플 코드가없는 문서를 제공 할 것입니다.

그리고 Areas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup :: Configure method에 다음 코드가 있습니다.

services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();

다음과 같이 / Program.cs ConfigureService에 추가해야하는 코드와 동일합니다. 문서에 역할 서비스 추가

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

따라서 asp.net core 2.2에서 동일한 문제가 발생하면 다른 해결책은 다음과 같습니다.

  1. Asp.net 2.2의 문서 따라 가기
  2. 이 장을 만나면 Identity에 역할 서비스 추가, 공식 문서를 무시하고 수행하십시오.

줄을 바꾸다

services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

Areas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup :: Configure 메소드에서 program.cs에 추가하지 마십시오 (파일을 asp.net 코어 2.2에서 삭제할 수 없음)

Asp.net Identity를 사용하는 프로젝트는 나중에 내 repos에서 업데이트됩니다 : WPHelper , Good Luck :)

2
Zyuuu

저자가 이미 문제를 해결했음을 알고 있지만 위의 답변의 모든 단계를 수행했지만 여전히이 오류가있는 다른 사람을 위해 이것을 추가 할 것입니다.

에서 Aspnet github

영역 /ID/IdentityHostingStartup.cs에서 자동 생성 된 IdentityHostingStartup.Configure 메소드를 삭제해야합니다.

0
Sinepitis