Ответ 1
Здесь Идентификатор ASP.NET reset
UserManager<IdentityUser> userManager =
new UserManager<IdentityUser>(new UserStore<IdentityUser>());
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
Мне интересно, есть ли способ reset пароля с UserManager
ASP.NET MVC 5
Я попробовал это с пользователем, у которого уже есть пароль, но нет успеха. Любая подсказка?
IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
//
}
else
{
AddErrors(result);
}
Здесь Идентификатор ASP.NET reset
UserManager<IdentityUser> userManager =
new UserManager<IdentityUser>(new UserStore<IdentityUser>());
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
Я предполагаю, что это новее, но в Identity 2.0 есть такой API:
IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
model.Code генерируется следующим образом, и вы должны отправить это как ссылку в электронном письме, чтобы убедиться, что пользователь, который требует изменить пароль, является тем, кому принадлежит адрес электронной почты:
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
попробуйте использовать хранилище пользователей:
var user = UserManager.FindById(forgotPasswordEvent.UserId);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword));
IdentityMembership классно, но все еще не хватает некоторой реализации
UPDATE
Идентификатор 2.0 теперь доступен и имеет намного больше функций
Я добавил это в мой класс UserManager:
public virtual async Task<IdentityResult> UpdatePassword(ApplicationUser user, string newPassword)
{
var passwordStore = Store as IUserPasswordStore<ApplicationUser, string>;
if (passwordStore == null)
throw new Exception("UserManager store does not implement IUserPasswordStore");
var result = await base.UpdatePassword(passwordStore, user, newPassword);
if (result.Succeeded)
result = await base.UpdateAsync(user);
return result;
}
Попробуйте этот код. Он отлично работает:
var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
string userName= UserName.Text;
var user =userManager.FindByName(userName);
if (user.PasswordHash != null )
{
userManager.RemovePassword(user.Id);
}
userManager.AddPassword(user.Id, newpassword);
Есть расширение для изменения пароля в пространстве имен Microsoft.AspNet.Identity.
https://msdn.microsoft.com/en-us/library/dn497466(v=vs.108).aspx