Saya baru saja memperbarui Asp.Net Identity Core
formulir aplikasi saya 1.0 ke 2.0.
Ada fitur baru yang ingin saya coba GenerateEmailConfirmationToken
, dll.
Saya menggunakan proyek ini sebagai referensi.
Ketika pengguna mencoba untuk mendaftar, saya mendapatkan kesalahan selama eksekusi metode Post Register
private readonly UserManager<ApplicationUser> _userManager;
public ActionResult Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var ifUserEXists = _userManager.FindByName(model.EmailId);
if (ifUserEXists == null) return View(model);
var confirmationToken = _userRepository.CreateConfirmationToken();//this is how i'm generating token currently.
var result = _userRepository.CreateUser(model,confirmationToken);
var user = _userManager.FindByName(model.EmailId);
if (result)
{
var code = _userManager.GenerateEmailConfirmationToken(user.Id);//error here
_userRepository.SendEmailConfirmation(model.EmailId, model.FirstName, confirmationToken);
//Information("An email is sent to your email address. Please follow the link to activate your account.");
return View("~/Views/Account/Thank_You_For_Registering.cshtml");
}
}
//Error("Sorry! email address already exists. Please try again with different email id.");
ModelState.AddModelError(string.Empty, Resource.AccountController_Register_Sorry__User_already_exists__please_try_again_);
return View(model);
}
Di antrean
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Saya mendapatkan kesalahan yang mengatakan:
No IUserTokenProvider is registered.
Untuk saat ini, saya hanya ingin melihat jenis kode yang dihasilkannya. Apakah ada perubahan yang perlu saya lakukan pada ApplicationUser
kelas saya yang diwarisi dari IdentityUser
kelas?
Atau adakah sesuatu yang perlu saya ubah agar fungsi tersebut berfungsi?
c#
asp.net
asp.net-identity-2
Cybercop
sumber
sumber
Jawaban:
Anda harus menentukan
UserTokenProvider
untuk menghasilkan token.Anda juga harus membaca artikel ini: Menambahkan Otentikasi Dua Faktor ke Aplikasi yang Menggunakan Identitas ASP.NET .
sumber
"Sample"
dan"EmailConfirmation"
? beberapa teks yang bisa apa saja?UserManager
Di ASP.NET Core, saat ini dimungkinkan untuk mengkonfigurasi layanan default di Startup.cs seperti ini:
Tidak perlu memanggil
DpapiDataProtectionProvider
atau apapun seperti itu. DefaultTokenProviders () akan menangani panggilan ke GenerateEmailConfirmationToken dari UserManager.sumber
Selain jawaban yang diterima, saya ingin menambahkan bahwa pendekatan ini tidak akan berfungsi di Situs Web Azure, Anda akan mendapatkan CryptographicException, bukan token.
Untuk memperbaikinya untuk Azure, terapkan IDataProtector Anda sendiri: lihat jawaban ini
Sedikit lebih detail di posting blog
sumber
Solusi saya:
Masalah saya dengan kode ini terpecahkan.
Semoga beruntung teman.
sumber
Jika ada orang lain yang melakukan kesalahan yang sama seperti yang saya lakukan. Saya mencoba membuat fungsi seperti di bawah ini dan cukup yakin kesalahan "Tidak ada IUserTokenProvider terdaftar." telah pergi. Namun begitu saya mencoba menggunakan tautan yang dihasilkan dari "callbackUrl", saya mendapat pesan kesalahan "Token tidak valid." Agar bisa bekerja, Anda perlu mendapatkan HttpContext UserManager. Jika Anda menggunakan aplikasi ASP.NET MVC 5 standar dengan akun pengguna individu, Anda dapat melakukannya seperti di bawah ini ..
Kode yang berfungsi:
Percobaan pertama yang tidak berhasil,
No IUserTokenProvider is registered.
hilang tetapi URL yang dibuat mendapatInvalid token.
.sumber
Sesuai pisker di atas
Di startup.cs Anda dapat menggunakan
Di .net core 2.0 Anda mungkin perlu menambahkan ke startup.cs:
Ini bekerja dengan baik untuk saya.
sumber
Saat memodifikasi file Identitas .NET Core, saya menemukan kesalahan ini:
Itu
fungsi tidak dapat menghasilkan token karena tidak ada penyedia yang tersedia saat mendaftarkan pengguna baru. Kesalahan ini memiliki perbaikan yang mudah!
Jika Anda seperti saya, Anda berubah
AddDefaultIdentity
dalamStartup.cs
fileAddIdentity
. Saya ingin menerapkan pengguna saya sendiri yang diwarisi dari pengguna dasar. Dengan melakukan ini saya kehilangan penyedia token default. Perbaikannya adalah menambahkannya kembaliAddDefaultTokenProviders()
.Setelah perbaikan itu, semuanya berfungsi kembali!
sumber: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
sumber
Saya mendapat kesalahan yang sama setelah memperbarui Identitas, dan ternyata itu karena saya menggunakan Unity.
Lihat utas pertanyaan ini tentang solusi: Daftarkan IAuthenticationManager dengan Unity
Juga di bawah untuk referensi cepat:
sumber
GeneratePasswordResetToken
- tetapi mendapat kesalahan yang sama dari "Tidak ada IUserTokenProvider terdaftar"). Setelah menambahkancontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
untukUnityConfig.cs
, itu bekerja.Anda juga mungkin
tertarik untuk melihat di sini: Bagaimana menerapkan TokenProvider di ASP.NET Identity 1.1 nightly build?
untuk menggunakan implementasi penyedia token default dari paket Microsoft.Identity.Owin
sumber
di IdentityConfig.cs, Tambahkan opsi dua faktor Anda:
sumber