2016-10-11 2 views
-2

У меня есть класс, который создает пользователь с помощью функции поиска по электронной почте и убедившись, что он не существует, и это создает пользователь:Изменения ASP.NET Идентичность Пароль

public async Task EnsureSeedDataAsync() 
    { 
     if (await _userManager.FindByEmailAsync("[email protected]") == null) 
     { 
      // Add the user. 
      var newUser = new CRAMSUser() 
      { 
       UserName = "test", 
       Email = "[email protected]" 
      }; 

      await _userManager.CreateAsync(newUser, "[email protected]!"); 
     } 
    } 

Я пытаюсь создать еще один класс для измените пароль с помощью того же метода, но я смущен тем, как создать объект currentUser, который будет передан в вызовы RemovePassword и AddPassword. Это то, что я до сих пор:

public async Task ChangePassword() 
    { 
     if (await _userManager.FindByEmailAsync("[email protected]") != null) 
     { 
      _userManager.RemovePasswordAsync(currentUser); 

      _userManager.AddPasswordAsync(currentUser, "newPassword"); 
     } 
    } 

Может кто-то пожалуйста направить меня в нужном направлении, как я новичок в этом и не знаю, как передать объект CurrentUser, который содержит электронную почту, которая в настоящее время поиск.

ответ

2

FindByEmailAsyc возвращает объект пользователя, вам необходимо сохранить его в переменной и передать его другим вызовам userManager. Кроме того, методы RemovePassword и AddPassword принимают ключевое значение вашего объекта User как параметр, а не весь объект User.

public async Task ChangePassword() 
{ 

    var currentUser = await _userManager.FindByEmailAsync("[email protected]") 
    if (currentUser != null) 
    { 
     _userManager.RemovePasswordAsync(currentUser.Id); 

     _userManager.AddPasswordAsync(currentUser.Id, "newPassword"); 
    } 
} 
+1

Выполнение этой операции в двух операциях не является хорошим, если вторая операция не работает, пользователь не имеет пароля – Tseng

+1

Да, использование метода «ChangePasswordAsync», вероятно, лучше, но я понял, что это выходит за рамки исходного вопроса. – jmoerdyk

1

См. Мой ответ в this question. Он позволяет сменить пароль только с помощью нового пароля userId &, что полезно, чтобы позволить администраторам устанавливать пароль пользователя и делать это за одну транзакцию.

Это сводится к созданию нового метода, который напрямую вызывает базовый пользовательский магазин.