Dalam rilis saat ini
Dengan asumsi Anda telah menangani verifikasi permintaan untuk menyetel ulang sandi yang terlupa, gunakan kode berikut sebagai contoh kode langkah.
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, diharapkan panduan kode sederhana.
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);
Jika Anda ingin mengubah sandi menggunakan UserManager tetapi tidak ingin memberikan sandi pengguna saat ini, Anda dapat membuat token setel ulang sandi, lalu langsung menggunakannya.
sumber
SecurityStamp
untuk pengguna Anda tidak null. Ini mungkin terjadi untuk pengguna yang bermigrasi dari database lain, atau pengguna yang tidak dibuat melaluiUserManager.CreateAsync()
metode.Tidak digunakan lagi
Ini adalah jawaban aslinya. Itu berhasil, tapi punya masalah. Bagaimana jika
AddPassword
gagal? Pengguna dibiarkan tanpa kata sandi.Jawaban asli: kita bisa menggunakan tiga baris kode:
Lihat juga: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx
Sekarang Direkomendasikan
Mungkin lebih baik menggunakan jawaban yang diusulkan EdwardBrey dan kemudian DanielWright kemudian menguraikannya dengan sampel kode.
sumber
Di
UserManager
, panggil pertama GeneratePasswordResetTokenAsync . Setelah pengguna memverifikasi identitasnya (misalnya dengan menerima token di email), teruskan token tersebut ke ResetPasswordAsync .sumber
ResetPasswordAsync
mengambil ID pengguna adalah penyedia identitas hanya perlu mengindeks ID pengguna, tidak juga token. Ini memungkinkan skalanya lebih baik jika ada banyak pengguna.Cuplikan kode ini diambil dari proyek AspNetIdentitySample yang tersedia di github
sumber
Buat metode di
UserManager<TUser, TKey>
sumber
Cara terbaik untuk Mereset Kata Sandi dalam penggunaan Identitas Inti Asp.Net untuk API Web.
Catatan * : Kesalahan () dan Hasil () dibuat untuk penggunaan internal. Anda dapat mengembalikan yang Anda inginkan.
sumber
Dalam kasus pengaturan ulang kata sandi, disarankan untuk mengatur ulang melalui pengiriman token pengaturan ulang kata sandi ke email pengguna terdaftar dan meminta pengguna untuk memberikan kata sandi baru. Jika telah membuat pustaka .NET yang dapat digunakan dengan mudah melalui kerangka kerja Identitas dengan pengaturan konfigurasi default. Anda dapat menemukan detailnya di tautan blog dan kode sumber di github.
sumber
Saya pikir panduan Microsoft untuk Identitas ASP.NET adalah awal yang baik.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
catatan:
Jika Anda tidak menggunakan AccountController dan tidak ingin mengatur ulang kata sandi, gunakan
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
. Jika Anda tidak memiliki OwinContext yang sama, Anda perlu membuat yang baruDataProtectorTokenProvider
seperti yangOwinContext
digunakan. Secara default, lihatApp_Start -> IdentityConfig.cs
. Akan terlihat sepertinew DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
.Bisa dibuat seperti ini:
Tanpa Owin:
Dengan Owin:
The
DpapiDataProtectionProvider
danDataProtectorTokenProvider
kebutuhan yang akan dibuat dengan nama yang sama untuk reset password untuk bekerja. Menggunakan Owin untuk membuat token reset kata sandi dan kemudian membuat yang baruDpapiDataProtectionProvider
dengan nama lain tidak akan berfungsi.Kode yang saya gunakan untuk ASP.NET Identity:
Web.Config:
AccountController.cs:
sumber
Saya melakukan sedikit investigasi dan solusi yang berhasil untuk saya adalah campuran dari beberapa solusi yang ditemukan dalam posting ini.
Saya pada dasarnya menyusun solusi ini dan saya memposting apa yang berhasil untuk saya. Dalam kasus saya, saya tidak ingin menggunakan token apa pun dari .net core.
sumber