ive构建了一个自定义提供商,以支持组和NOSQL数据库。除了身份验证外,这一切似乎都起作用(可以创建帐户的结束而没有问题)。我使用自己的实体类,这些类别不从IdentityUser 等上继承。
im的问题就是说,例如var loginres =等待this。
无效的exception:未配置身份验证处理程序 处理该方案:身份。应用
IVE设置的方式我的代码如下:
services.AddIdentity<User, Role>()
.AddUserStore<NoSqlUserStore<User, Role>>()
.AddRoleStore<NoSqlRoleStore<Role>>()
.AddUserManager<IdentityUserManager<User>>()
.AddRoleManager<IdentityRoleManager<Role>>()
.AddDefaultTokenProviders();
管理器类仅继承用户和角色管理类,什么也没有更改或添加ATM。
public class IdentityUserManager<TUser> : UserManager<TUser>
where TUser : User, new()
{
public IdentityUserManager(IUserStore<TUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<TUser> passwordHasher, IEnumerable<IUserValidator<TUser>> userValidators, IEnumerable<IPasswordValidator<TUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<IdentityUserManager<TUser>> logger)
: base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{
}
}
public class IdentityRoleManager<TRole> : RoleManager<TRole>
where TRole : Role
{
public IdentityRoleManager(IRoleStore<TRole> store, IEnumerable<IRoleValidator<TRole>> roleValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, ILogger<RoleManager<TRole>> logger, IHttpContextAccessor contextAccessor)
: base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
{
}
}
商店的签名如下:
public class NoSqlRoleStore<TRole> : RoleStoreBase, IRoleStore<TRole>
where TRole : Role, new()
{
}
public class NoSqlUserStore<TUser, TRole> : UserStoreBase<TUser>, //todo: include groups in rolechecking
IUserLoginStore<TUser>,
IUserRoleStore<TUser>,
IUserClaimStore<TUser>,
IUserPasswordStore<TUser>,
IUserSecurityStampStore<TUser>,
IUserEmailStore<TUser>,
IUserLockoutStore<TUser>,
IQueryableUserStore<TUser>,
IUserTwoFactorStore<TUser>,
IUserAuthenticationTokenStore<TUser>
where TUser : User, IEntity, new() where TRole : Role, IEntity, new()
{
}
当然,它们包含所有接口方法,除了错误之外,它会编译,运行和工作。用户和角色类是与所提供的实体相似的普通实体。
我的猜测是我缺少某些配置表(即使在我看过的,即身份应在此方面提供工作默认值?)。我从未在默认实体框架提供商之外使用身份。但是我希望有人也许知道这里需要什么?(如果需要更多的代码来说明情况,请修复这种情况)
您应该定义您的自定义USERSTORE
public class MyUserStore : IUserStore<CustomUser,int>,
IUserPasswordStore<CustomUser,int>,
IUserSecurityStampStore<CustomUser, int>,
IUserLoginStore<CustomUser, int>,IUserRoleStore<CustomUser,int>
{
//interfaces implementations
}
wustrouser是您的用户类,它实现Tuser接口,而" int"是您的Primine键字段的类型
如果您有字符串主键使用
IUserStore<CustomUser>
是否需要定义CustomuserManager
public class CustomUserManager: UserManager<CustomeUser,int> // UserManager<CustomeUser> if primary is string
{
}
原因是app.useidentity()。如No Authentication Handler所述,为该方案进行了身份验证:Microsoft.aspnet.Identity.External