Pertanyaan ASP.NET Identity reset kata sandi


Bagaimana saya bisa mendapatkan kata sandi pengguna dalam sistem Identitas ASP.NET yang baru? Atau bagaimana saya bisa mereset tanpa mengetahui yang sekarang (pengguna lupa kata sandi)?


74
2017-10-22 17:06


asal


Jawaban:


Dalam rilis saat ini

Dengan asumsi Anda telah menangani verifikasi permintaan untuk mereset kata sandi yang terlupakan, gunakan kode berikut sebagai langkah kode sampel.

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

Di AspNet Nightly Build

Kerangka kerja diperbarui untuk bekerja dengan Token untuk menangani permintaan seperti ForgetPassword. Setelah dirilis, panduan kode sederhana diharapkan.

Memperbarui:

Pembaruan ini hanya untuk memberikan langkah yang lebih jelas.

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

86
2017-10-22 19:29



Atau bagaimana saya bisa mereset tanpa mengetahui yang sekarang (pengguna lupa kata sandi)?

Jika Anda ingin mengubah kata sandi menggunakan UserManager tetapi Anda tidak ingin memberikan kata sandi pengguna saat ini, Anda dapat menghasilkan token reset kata sandi dan kemudian menggunakannya sebagai gantinya.

string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);

100
2018-03-24 15:23



Tidak berlaku lagi

Ini adalah jawaban asli. Itu berhasil, tetapi memiliki masalah. Bagaimana jika AddPassword gagal? Pengguna dibiarkan tanpa kata sandi.

Jawaban asli: kita dapat menggunakan tiga baris kode:

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);

Lihat juga: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

Sekarang Direkomendasikan

Mungkin lebih baik menggunakan jawaban itu EdwardBrey mengusulkan lalu DanielWright kemudian diuraikan dengan contoh kode.


66
2018-03-18 20:53



Pada Anda UserManager, panggilan pertama GeneratePasswordResetTokenAsync. Setelah pengguna memverifikasi identitasnya (misalnya dengan menerima token dalam email), berikan token kepada ResetPasswordAsync.


26
2018-04-15 20:49



Buat metode di 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);
}

2
2017-12-02 15:18



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

Potongan kode ini diambil dari proyek AspNetIdentitySample tersedia di github


1
2017-10-22 17:48



Dalam hal pengaturan ulang kata sandi, dianjurkan untuk meresetnya melalui pengiriman token pengaturan ulang kata sandi ke email pengguna terdaftar dan meminta pengguna untuk memberikan kata sandi baru. Jika telah membuat perpustakaan .NET yang mudah digunakan melalui kerangka Identitas dengan pengaturan konfigurasi default. Anda dapat menemukan detail di tautan blog dan Kode sumber di github.


1
2017-08-05 19:11