C# ASP.NET Core 2.2如何重写UserManager.CreateAync以删除唯一用户名要求
我正在尝试重写UserManager.CreateAsync以删除唯一用户名的要求。我该怎么做 到目前为止,这就是我所拥有的C# ASP.NET Core 2.2如何重写UserManager.CreateAync以删除唯一用户名要求,c#,asp.net-mvc,asp.net-core,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,我正在尝试重写UserManager.CreateAsync以删除唯一用户名的要求。我该怎么做 到目前为止,这就是我所拥有的 public class CustomUserManager : UserManager<User> { public string TenantId { get; set; } public CustomUserManager(IUserStore<User> store, IOptions<IdentityOptions&
public class CustomUserManager : UserManager<User>
{
public string TenantId { get; set; }
public CustomUserManager(IUserStore<User> store, IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<User> passwordHasher, IEnumerable<IUserValidator<User>> userValidators,
IEnumerable<IPasswordValidator<User>> passwordValidators, ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<User>> logger) : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{
}
public override async Task<IdentityResult> CreateAsync(User user, string Password)
{
ThrowIfDisposed();
user.TenantId = this.TenantId;
if (user == null)
{
throw new ArgumentNullException("user");
}
var result = dbContext.Users.Any(u => u.UserName == user.UserName && u.TenantId == user.TenantId);
if (result == true)
{
return IdentityResult.Failed();
}
return await base.CreateAsync(user, Password);
}
}
公共类CustomUserManager:UserManager
{
公共字符串TenantId{get;set;}
public CustomUserManager(IUserStore存储、IOOptions访问器、,
IPasswordHasher密码hasher,IEnumerable用户验证程序,
IEnumerable PasswordValidator、ILookupNormalizer、keyNormalizer、,
IdentityErrorDescriber错误、IServiceProvider服务、ILogger记录器):基本(存储、选项访问器、密码哈希器、用户验证器、密码验证器、密钥规范化器、错误、服务、记录器)
{
}
公共重写异步任务CreateAsync(用户,字符串密码)
{
ThrowIfDisposed();
user.TenantId=this.TenantId;
if(user==null)
{
抛出新的ArgumentNullException(“用户”);
}
var result=dbContext.Users.Any(u=>u.UserName==user.UserName&&u.TenantId==user.TenantId);
如果(结果==真)
{
返回IdentityResult.Failed();
}
返回wait base.CreateAsync(用户,密码);
}
}
由于我使用base.CreateAsync,无法强制创建用户。如何覆盖CreateSync正在执行的操作
我被这件事缠住了 请尝试设置dbContext.Configuration.ValidateOnSaveEnabled=false;查看它是否工作。请尝试设置dbContext.Configuration.ValidateOnSaveEnabled=false;查看它是否工作。您想要一个可以多次注册的用户名吗?这里有什么要求指南?如果是,使用相同的用户名登录哪个帐户?用户表中将有一个分开用户名的租户。您必须创建自己的用户存储和自定义用户对象。这样你就可以为整件事编写自己的逻辑。这将需要更多的工作。您是否也尝试过不调用base.CreateAsync并编写自己的逻辑?可能是不同的Net db,或者您将要求他们指定一个租户?看起来也许你最好在TenantId中过关,你会对如何实现这一愿景感兴趣。containt在DB上强制执行,因此您需要将其删除并添加一个新的containt以包含username和TenantId,然后createUser可能会为您处理,您需要验证。这是一个虚拟算法,但当您创建user时,您可以将TenantId映射到用户名,以便TenantId和Username列具有相同的值。是否希望用户名可以注册多次?这里有什么要求指南?如果是,使用相同的用户名登录哪个帐户?用户表中将有一个分开用户名的租户。您必须创建自己的用户存储和自定义用户对象。这样你就可以为整件事编写自己的逻辑。这将需要更多的工作。您是否也尝试过不调用base.CreateAsync并编写自己的逻辑?可能是不同的Net db,或者您将要求他们指定一个租户?看起来也许你最好在TenantId中过关,你会对如何实现这一愿景感兴趣。containt在DB上强制执行,因此您需要将其删除并添加一个新的containt以包含username和TenantId,然后createUser可能会为您处理,您需要验证。这是一个虚拟算法,但当您创建user时,您可以将TenantId映射到username,以便TenantId和username列具有相同的值。