ASP.NET MVC 5のUserManager
でパスワードをリセットする方法があるかどうか疑問に思っています
すでにパスワードは持っているが成功していないユーザーでこれを試しました。どんな手掛かり?
IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
//
}
else
{
AddErrors(result);
}
ここにあります ASP.NET Identity reset password
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 validPass= await userManager.PasswordValidator.ValidateAsync(txtPassword1.Text);
if(validPass.Succeeded)
{
var user = userManager.FindByName(currentUser.LoginName);
user.PasswordHash = userManager.PasswordHasher.HashPassword(txtPassword1.Text);
var res= userManager.Update(user);
if(res.Succeeded)
{
// change password has been succeeded
}
}
ユーザーストアを使用してみてください:
var user = UserManager.FindById(forgotPasswordEvent.UserId);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword));
IdentityMembershipはクールですが、それでも 実装を欠いています
[〜#〜] update [〜#〜]
Identity 2.0がここにあり、さらに多くの機能があります
このコードを試してください。それは完全に動作しています:
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);
これを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;
}
名前空間Microsoft.AspNet.Identityにパスワードを変更するための拡張機能があります。
https://msdn.Microsoft.com/en-us/library/dn497466(v = vs.108).aspx