Member 13081540 Ответов: 1

Тестирование usermanager создает пользователя, но свойство хэша пароля имеет значение null


я работаю с Microsoft.AspNetCore.Идентичность.UserManager и я пытаюсь издеваться над созданием нового пользователя. На самом деле он действительно создает нового пользователя с именем пользователя, электронной почтой и т. д., Но свойство хэша пароля по-прежнему равно нулю.

Вот как я настроил макет usermanager с некоторыми дополнительными настройками:

var store = new Mock>();

var validator = new UserValidator();
var passValidator = new PasswordValidator();

var mgr = new Mock>(store.Object, null, null, null, null, null, null, null, null);
mgr.Object.UserValidators.Add(validator);
mgr.Object.PasswordValidators.Add(passValidator);
mgr.Object.PasswordHasher = new PasswordHasher();
mgr.Object.Options = AuthenticationRules.DefaultAuthenticationRules();

List users= new List();

mgr.Setup(x => x.DeleteAsync(It.IsAny())).ReturnsAsync(IdentityResult.Success);
mgr.Setup(x => x.CreateAsync(It.IsAny(), It.IsAny())).ReturnsAsync(IdentityResult.Success).Callback((x, y) => users.Add(x));
mgr.Setup(x => x.UpdateAsync(It.IsAny())).ReturnsAsync(IdentityResult.Success);


'DefaultAuthenticationRules' возвращает это:

 public static IdentityOptions DefaultAuthenticationRules(
IdentityOptions identityOptions = null)
    {
        if(identityOptions == null)
            identityOptions = new IdentityOptions();

        identityOptions.User.RequireUniqueEmail = true;
        identityOptions.Password.RequireNonAlphanumeric = false;
        identityOptions.Password.RequiredUniqueChars = 0;

        return identityOptions;
    }


Затем я передаю объект mgr.Object методу, который обрабатывает создание нового пользователя, где "объект" - это _userManager

var creationResult = await _userManager.CreateAsync(_user, _registrationModel.Password);

if (!creationResult.Succeeded)
    return false;

return true;


_registrationModel.Пароль заполняется.

Так что теперь при установке добавления нового пользователя в обратный вызов в список пользователей пользователь заполняется без хэша пароля. Я не совсем понимаю, чего мне здесь не хватает. Я что-то упустил в mgr.Подстава?

Что я уже пробовал:

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

var options = new Mock>();
var idOptions = AuthenticationRules.DefaultAuthenticationRules();
options.Setup(o => o.Value).Returns(idOptions);

var mgr = new Mock>(store.Object, options.Object, null, null, null, null, null, null, null);


Но свойство passwordhash по-прежнему является нулевым для пользователя.

Заранее спасибо.

Заранее спасибо

1 Ответов

Рейтинг:
0

Garth J Lancaster

Вы полагаете, что пароль должен быть вызван автоматически ?

Я провел кое - какие исследования и не был убежден-я бы подумал, что вам понадобится

ApplicationUser user = _userManager.Users...;
user.PasswordHash = _userManager.PasswordHasher.HashPassword(user, _registrationModel.Password);

где-то там ...