Идентификатор ASP.NET reset

Как я могу получить пароль пользователя в новой системе ASP.NET Identity? Или как я могу reset не знать текущий (пользователь забыл пароль)?

Ответ 1

В текущей версии

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

ApplicationDbContext =new ApplicationDbContext()
String userId = "<YourLogicAssignsRequestedUserId>";
String newPassword = "<PasswordAsTypedByUser>";
ApplicationUser cUser = UserManager.FindById(userId);
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();            
store.SetPasswordHashAsync(cUser, hashedNewPassword);

В AspNet Nightly Build

Рамка обновлена ​​для работы с Token для обработки запросов, таких как ForgetPassword. Как только в выпуске ожидается простое управление кодом.

Update:

Это обновление предназначено только для более четких шагов.

ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
String userId = User.Identity.GetUserId();//"<YourLogicAssignsRequestedUserId>";
String newPassword = "[email protected]"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);                    
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);

Ответ 2

Или как я могу reset не знать текущий (пользователь забыл пароль)?

Если вы хотите изменить пароль с помощью UserManager, но вы не хотите указывать текущий пароль пользователя, вы можете сгенерировать пароль reset, а затем использовать его немедленно.

string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);

Ответ 3

Устаревшие

Это был оригинальный ответ. Он работает, но имеет проблему. Что делать, если AddPassword терпит неудачу? Пользователь остается без пароля.

Оригинальный ответ: мы можем использовать три строки кода:

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);

Смотрите также: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

Теперь рекомендуется

Вероятно, лучше использовать ответ, который предложил EdwardBrey, а затем DanielWright позже разработал с образцом кода.

Ответ 4

На вашем UserManager, сначала вызовите GeneratePasswordResetTokenAsync. Как только пользователь подтвердит свою личность (например, получив токен в электронном письме), передайте токен в ResetPasswordAsync.

Ответ 5

Создать метод в UserManager<TUser, TKey>

public Task<IdentityResult> ChangePassword(int userId, string newPassword)
{
     var user = Users.FirstOrDefault(u => u.Id == userId);
     if (user == null)
          return new Task<IdentityResult>(() => IdentityResult.Failed());

     var store = Store as IUserPasswordStore<User, int>;
     return base.UpdatePassword(store, user, newPassword);
}

Ответ 6

string message = null;
//reset the password
var result = await IdentityManager.Passwords.ResetPasswordAsync(model.Token, model.Password);
if (result.Success)
{
    message = "The password has been reset.";
    return RedirectToAction("PasswordResetCompleted", new { message = message });
}
else
{
    AddErrors(result);
}

Этот фрагмент кода выводится из проекта AspNetIdentitySample доступного в github

Ответ 7

В случае пароля reset рекомендуется reset его путем отправки пароля reset на зарегистрированный пользовательский адрес электронной почты и попросить пользователя предоставить новый пароль. Если вы создали легко используемую библиотеку .NET поверх платформы Identity с настройками конфигурации по умолчанию. Подробные сведения можно найти в ссылка на блог и исходный код в github.