Вернуть местоположение CreatedAtRoute из ODataController

ApplicationUserManager - это класс, сгенерированный шаблоном ASP.NET.

Это означает, что вы можете отредактировать его и добавить любую функциональность, которой он еще не был. Класс UserManager имеет защищенное свойство с именем Store, в котором хранится ссылка на класс UserStore (или любой его подкласс в зависимости от того, как вы настроили вашу идентификационную информацию ASP.NET или используете пользовательские реализации хранилища пользователей, то есть, если вы используйте другой механизм базы данных, такой как MySQL).

public class AplicationUserManager : UserManager<....> 
{
    public async Task ChangePasswordAsync(TKey userId, string newPassword) 
    {
        var store = this.Store as IUserPasswordStore;
        if(store==null) 
        {
            var errors = new string[] 
            { 
                "Current UserStore doesn't implement IUserPasswordStore"
            };

            return Task.FromResult(new IdentityResult(errors) { Succeeded = false });
        }

        if(PasswordValidator != null)
        {
            var passwordResult = await PasswordValidator.ValidateAsync(password);
            if(!password.Result.Success)
                return passwordResult;
        }

        var newPasswordHash = this.PasswordHasher.HashPassword(newPassword);

        await store.SetPasswordHashAsync(userId, newPasswordHash);
        return Task.FromResult(IdentityResult.Success);
    }
}

UserManager - не что иное, как обертка для базового UserStore. Проверьте документацию интерфейса IUserPasswordStore в MSDN на доступных методах.

Изменить: PasswordHasher также является общедоступным свойством класса UserManager, см. определение интерфейса здесь .

Редактировать 2: Поскольку некоторые люди наивно полагать, вы не можете сделать проверку пароля таким образом, я его обновил. Свойство PasswordHasher также является свойством UserManager, а также просто добавляет 2 строки кода, чтобы добавить проверку пароля (но это не было требование первоначального вопроса).

0
задан Andrei Visnakovs 16 January 2019 в 09:57
поделиться