새 ASP.NET Identity System에서 사용자의 암호를 얻으려면 어떻게해야합니까? 또는 현재 암호를 모르고 어떻게 재설정 할 수 있습니까 (사용자가 암호를 잊어 버림)?
답변
현재 릴리스에서
잊어 버린 비밀번호 재설정 요청에 대한 확인을 처리했다고 가정하면 다음 코드를 샘플 코드 단계로 사용합니다.
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에서
ForgetPassword와 같은 요청을 처리하기 위해 토큰과 함께 작동하도록 프레임 워크가 업데이트되었습니다. 출시되면 간단한 코드 안내가 예상됩니다.
최신 정보:
이 업데이트는 더 명확한 단계를 제공하기위한 것입니다.
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 = "test@123"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);
답변
또는 현재 암호를 모르고 어떻게 재설정 할 수 있습니까 (사용자가 암호를 잊어 버림)?
UserManager를 사용하여 비밀번호를 변경하고 싶지만 사용자의 현재 비밀번호를 제공하지 않으려는 경우 비밀번호 재설정 토큰을 생성 한 다음 대신 즉시 사용할 수 있습니다.
string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);
답변
사용되지 않음
이것이 원래의 대답이었습니다. 작동하지만 문제가 있습니다. 만약에 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 나중에 정교 코드 샘플을.
답변
당신에 UserManager
먼저 전화 GeneratePasswordResetTokenAsync을 . 사용자가 자신의 신원을 확인한 후 (예 : 이메일로 토큰 수신) 토큰을 ResetPasswordAsync에 전달합니다 .
답변
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);
}
이 코드 조각은 github에서 사용할 수 있는 AspNetIdentitySample 프로젝트에서 가져온 것입니다.
답변
방법 만들기 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);
}