ASP.NET Identity, сброс пароля сбрасывает «Имя уже занято»

1

У меня есть функция сброса пароля в моем контроллере 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;
        }
  • 0
    Что такое AuthService ? Это вещь ASPNet Identity или ваша собственная оболочка?
Теги:
asp.net-mvc
asp.net-identity
owin

2 ответа

2

Если проблема является дублированным адресом электронной почты, этот фрагмент кода в моем пользовательском UserManager исправил его:

manager.UserValidator = New UserValidator(Of ApplicationUser, Integer)(manager) With {
          .AllowOnlyAlphanumericUserNames = False,
          .RequireUniqueEmail = False
        }

Извините, VB, не мой выбор!

0

Да. По умолчанию UserValidator в ASP.NET Identity не допускает дублирования. Вам нужно будет предоставить свою собственную реализацию UserValidator<TUser,TKey> (или UserValidator<Tuser>) и переопределить метод Validate(TUser item) с вашей собственной реализацией, которая также учитывает TenantId

Затем вы подключите этот UserValidator к UserManager.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню