[asp.net] ASP.NET ID 재설정 암호

새 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);
}


답변

비밀번호 재설정의 경우 등록 된 사용자 이메일로 비밀번호 재설정 토큰을 전송하여 재설정하고 사용자에게 새 비밀번호 제공을 요청하는 것이 좋습니다. 기본 구성 설정으로 Identity 프레임 워크를 통해 쉽게 사용할 수있는 .NET 라이브러리를 만든 경우. 자세한 내용은 블로그 링크 및 github의 소스 코드 에서 확인할 수 있습니다 .