ASP.NET 5에서 Entity Framework없이 인증 및 권한 부여 MVC 6

asp.net asp.net-core asp.net-mvc c# dapper

문제

Entity Framework (Dapper 사용)를 사용하지 않고 기존 데이터베이스 및 테이블을 사용하여 인증 및 권한 부여를 구성하려고합니다.

Dapper를 올바르게 구성 했으므로 이제 SignInManager를 연결하려고 시도하고 UserManager가 Dapper를 통해 데이터베이스를 호출하려고합니다.하지만 그 전에는 사용자 정의 역할 저장소에서 오류가 발생합니다.

여기 웹 사이트에서 "등록"버튼을 클릭 할 때받는 오류가 있습니다 (이것은 미리 정의 된 계정 등 모든 항목이있는 일반 프로젝트 일뿐입니다)

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNet.Identity.IRoleStore`1[TestAsyncWebsite.Configuration.WrestleStatRole]' while attempting to activate 'Microsoft.AspNet.Identity.RoleManager`1[TestAsyncWebsite.Configuration.WrestleStatRole]'

지금은 사용자 정의 사용자, 역할, 사용자 저장소, 역할 저장소, usermanager 및 rolemanager를 구성한 방법은 다음과 같습니다.

    public class WrestleStatUser : ApplicationUser
    {
        public WrestleStatUser() : base()
        {

        }
    }

    public class WrestleStatRole : IdentityRole
    {

    }

public class WrestleStatUserStore : IUserStore<WrestleStatUser>
{
   // all methods implemented
}

public class WrestleStatRoleStore : IRoleStore<WrestleStatRole>
{
   // all methods implemented
}

    public class WrestleStatUserManager : UserManager<WrestleStatUser>
    {
        public WrestleStatUserManager(IUserStore<WrestleStatUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<WrestleStatUser> passwordHasher, IEnumerable<IUserValidator<WrestleStatUser>> userValidators, IEnumerable<IPasswordValidator<WrestleStatUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IEnumerable<IUserTokenProvider<WrestleStatUser>> tokenProviders, ILogger<UserManager<WrestleStatUser>> logger, IHttpContextAccessor contextAccessor)
            : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, tokenProviders, logger, contextAccessor)
        {
        }
    }

public class WrestleStatRoleManager : RoleManager<WrestleStatRole>
{
    public WrestleStatRoleManager(IRoleStore<WrestleStatRole> store, IEnumerable<IRoleValidator<WrestleStatRole>> roleValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, ILogger<RoleManager<WrestleStatRole>> logger, IHttpContextAccessor contextAccessor) : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
    {
    }
}

여기 내 startup.cs가 있습니다.

    services.AddIdentity<WrestleStatUser, WrestleStatRole>()
        .AddUserStore<WrestleStatUserStore>()
        .AddUserManager<WrestleStatUserManager>()
        //.AddRoleStore<RoleStore>()
        .AddRoleManager<WrestleStatRoleManager>()
        .AddDefaultTokenProviders();

내가 여기서 무엇을 놓치고 있니? 오류가 RoleManager에 대해 말했고, 이미 사용자 정의 RoleManager를 정의했습니다 ...

수락 된 답변

내가보기에 당신의 WrestleStatRole은 신원의 일부처럼 ​​들릴지도 모르는 IdentityRole 로부터 상속 받지만 EntityFramework Identity 구현의 일부분입니다. EF없이 일을하려한다면, 상속해서는 안됩니다.

자신 만의 역할 클래스가 필요하며 EF 구현 클래스를 사용하지 않아야합니다.

비슷하게 WrestleStatUser에서 상속받은 ApplicationUser는 웹 응용 프로그램 프로젝트 모델 폴더에 있지만 Identity 의 EntityFramework 구현의 일부인 IdentityUser 에서 상속되지 않는지 확인하십시오

Entity Framework를 사용하지 않으려면 IUserStore와 IRoleStore를 구현하고 di 서비스에 등록해야합니다.

services.AddScoped<IUserStore<WrestleStatUser>, UserStore<WrestleStatUser>>();
services.AddScoped<IRoleStore<WrestleStatRole>, RoleStore<WrestleStatRole>>();

언급 한 바와 같이 사용자 및 역할 클래스는 EF 구현을 상속하지 않아야합니다. 사실 상점을 구현하고 작동하는 한 어떤 것도 상속 할 필요가 없습니다.

userstore와 rolestore를 구현하면 내장 된 UserManager를 사용할 수 있습니다. 다른 이유가 없다면 직접 구현하지 않아도됩니다.

당신이 예제 코드를 필요로한다면, 당신은 내 cloudscribe 프로젝트를 볼 수 있습니다. 엔티티 프레임 워크를 사용하지 않는 커스텀 멀티 테넌트 아이덴티티 구현을 구현했습니다. 사실 나는 플러그 인될 수있는 다중 데이터 레이어를 지원하고 있으며 EF는 그 중 하나이지만 ID 비트로부터 멀리 떨어져 있으며 Microsoft.AspNetCore.Identity.EntityFrameworkCore 네임 스페이스에서 전혀 사용하지 않을 것입니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow