ASP.NET 5 MVC 6中没有实体框架的身份验证和授权

甘德斯

我正在尝试使用现有数据库和表配置身份验证和授权,而不使用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]'

现在,这是我配置自定义用户,角色,用户存储,角色存储,用户管理器和角色管理器的方式:

    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 ...

乔·奥黛特(Joe Audette)

我看到的一个问题是您的WrestleStatRole继承自IdentityRole,这听起来像Identity的一部分,但实际上是EntityFramework Identity实现的一部分,如果您尝试在没有EF的情况下执行操作,则不应从该继承。

您将需要自己的角色类,并且不应使用EF实现中的任何类。

同样,您在WrestleStatUser中继承的ApplicationUser在Web应用程序项目models文件夹中,但请确保它不从IdentityUser继承,后者是Identity的EntityFramework实现的一部分

要不使用实体框架,必须实现IUserStore和IRoleStore并向di服务注册

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

并且如上所述,您的用户和角色类不应继承自EF实现,实际上,只要您实现了这些存储并且它们可以工作,它们就根本不需要继承任何东西。

如果实现用户存储和角色存储,则可以使用内置的UserManager,除非您有其他原因,否则不需要自己实现。

如果需要示例代码,可以查看我的cloudscribe项目,我已经实现了一个不使用实体框架的自定义多租户身份实现。实际上,我正在支持可以插入的多个数据层,而EF是其中之一,但它与身份位无关,我根本不使用Microsoft.AspNetCore.Identity.EntityFrameworkCore命名空间中的任何内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET MVC 5中实现自定义身份验证

ASP.NET MVC5 OWIN Facebook身份验证突然不起作用

没有实体框架的Asp.Net Owin身份验证

使用Windows身份验证和OWIN的ASP.NET MVC5 / AngularJS / Web API应用

ASP.NET MVC + Web API2 + AngularJS授权和身份验证

ASP .NET MVC 5中的异步任务

使用ExternalLoginCallback进行身份验证如何获取UserId和UserName ASP.NET MVC5

Asp.Net MVC 6 Cookie身份验证-授权失败

ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

ASP.Net MVC 5中的Cookie

身份如何在ASP .NET MVC 5中工作

ASP.NET MVC:SimpleMembership,SQLSession存储,身份验证和授权如何工作?

IdentityServer4替换Asp.net 4.5 MVC5 SimpleMembership进行身份验证

在没有实体框架和SQL Server的情况下,新的ASP.NET MVC身份框架是否可以工作?

ASP.NET MVC 5表单验证

ASP.NET MVC5实体框架6 get bool = true和bool = false LINQ

ASP.NET MVC / Web Api通用授权和身份验证

身份:在两个不同的asp.net mvc5应用程序中的身份验证

ASP.NET MVC 5和WEB API使用相同的身份验证

ASP.NET MVC 5实体框架-关系

asp.net mvc中不同用户类型的自定义身份验证和授权

ASP.NET MVC 5中的身份验证和授权

asp.net身份通过链接/ URL进行身份验证asp.net mvc 5

Asp.net 5 MVC 6自定义身份验证

Angular 2和Asp.Net 5 MVC 6-身份验证实践

ASP .NET - MVC 5 - 实体框架 - 代码优先 - 表单身份验证

登录时的 ASP.NET MVC5 身份验证

ASP .NET 4.7 MVC 身份验证和授权标识

ASP.NET MVC 5、ASP.NET Core MVC 5 有什麼區別?