【发布时间】:2019-09-19 06:33:59
【问题描述】:
我正在尝试在 asp.net 核心中构建一个多租户应用程序并像这样注册 asp.net 身份:
services.AddIdentity<TUserIdentity, TUserIdentityRole>(options =>
{
options.User.RequireUniqueEmail = false;
})
.AddUserValidator<MultitenantUserValidator<TUserIdentity>>()
.AddEntityFrameworkStores<TContext>()
.AddDefaultTokenProviders();
我的MultitenantUserValidator 班级:
public class MultitenantUserValidator<TUser> : IUserValidator<TUser>
where TUser : UserIdentity
{
public async Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user)
{
bool combinationExists = await manager.Users
.AnyAsync(x => x.UserName == user.UserName
&& x.Email == user.Email
&& x.TenantId == user.TenantId);
if (combinationExists)
return IdentityResult.Failed(new IdentityError { Description = "The specified username and email are already registered in the given tentant" });
return IdentityResult.Success;
}
}
这是我的DbSeedingHelper 课程的一部分
var result = await userManager.CreateAsync(user, Users.AdminPassword);
if (result.Succeeded)
{
// Add user to role
var userRoleresult = await userManager.AddToRoleAsync(user, AuthorizationConsts.AdministrationRole);
}
当它执行将创建的用户添加到角色的行时,身份结果失败并出现来自MultitenantUserValidator 的错误:“指定的用户名和电子邮件已在给定租户中注册”。
我不知道为什么在尝试将已创建的用户添加到角色时它会返回验证器。我认为它只是在创建用户时才被调用。因此,我无法将用户添加到角色。我该如何解决这个问题?
【问题讨论】:
标签: c# asp.net-core asp.net-identity multi-tenant