У меня есть функция сброса пароля в моем контроллере mvc с помощью этого кода:
var user = AuthService.GetUser(command.IdUser);
if (user == null)
{
return PartialView("_MessageFailed", "The user doesn't exists");
}
if (user.TenantId != command.IdWebsite)
{
return PartialView("_MessageFailed", "You are not allowed to reset this user password");
}
var token = AuthService.GenerateUserPasswordToken(user.Id);
var result = AuthService.ResetPassword(user.Id, token, command.NewPassword);
if (result.Succeeded)
return PartialView("_MessageSuccess", "The password has changed");
return PartialView("_MessageFailed", string.Join("<br>", result.Errors));
Пользователь существует, но у меня есть ошибка в объекте result
в методе сброса, который говорит, что Name [email protected] is already taken.
Почему это происходит? Может быть, потому, что в таблице aspnetusers
в базе данных есть два пользователя с одинаковым адресом электронной почты и разными tenantId? Как я могу это исправить?
Обновление: AuthService является защищенным свойством:
protected AuthenticationLogic AuthService
{
get
{
return authService ?? new AuthenticationLogic(HttpContext.GetOwinContext());
}
private set { authService = value; }
}
Где конструктор AuthenticationLogic:
public AuthenticationLogic(IOwinContext owinContext) {
this.owinContext = owinContext;
}
Если проблема является дублированным адресом электронной почты, этот фрагмент кода в моем пользовательском UserManager исправил его:
manager.UserValidator = New UserValidator(Of ApplicationUser, Integer)(manager) With {
.AllowOnlyAlphanumericUserNames = False,
.RequireUniqueEmail = False
}
Извините, VB, не мой выбор!
Да. По умолчанию UserValidator в ASP.NET Identity не допускает дублирования. Вам нужно будет предоставить свою собственную реализацию UserValidator<TUser,TKey>
(или UserValidator<Tuser>
) и переопределить метод Validate(TUser item)
с вашей собственной реализацией, которая также учитывает TenantId
Затем вы подключите этот UserValidator
к UserManager
.
AuthService
? Это вещь ASPNet Identity или ваша собственная оболочка?