Как я могу получить пароль пользователя в новой системе ASP.NET Identity? Или как я могу reset не знать текущий (пользователь забыл пароль)?
Идентификатор ASP.NET 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.