Saya sedang dalam proses membuat aplikasi baru dan mulai menggunakan EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity .Owin 1.0.0-rc1, dll. Dan dengan rilis RTM kemarin, saya memperbaruinya melalui NuGet malam ini ke RTM.
Terlepas dari beberapa perubahan kode pada pekerjaan yang telah saya lakukan sejauh ini, semua tampaknya berjalan dengan baik, sampai saya mencoba membuat akun pengguna lokal untuk aplikasi tersebut.
Saya telah mengerjakan alamat email menjadi format nama pengguna yang dengan kandidat rilis berfungsi dengan baik, tetapi sekarang ketika membuat pengguna dengan alamat email untuk nama pengguna, itu memunculkan kesalahan validasi berikut:
Nama pengguna [email protected] tidak valid, hanya boleh berisi huruf atau angka.
Saya telah menghabiskan satu jam terakhir mencari solusi atau dokumentasi tentang opsi konfigurasi untuk itu, tetapi tidak berhasil.
Adakah cara saya dapat mengkonfigurasinya untuk mengizinkan alamat email untuk nama pengguna?
sumber
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;
Jawaban:
Anda dapat mengizinkan ini dengan memasukkan UserValidator Anda sendiri di UserManager, atau hanya dengan mematikannya pada implementasi default:
sumber
public AccountController(UserManager<ApplicationUser> userManager)
add konstruktorUserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
Versi C # ini (di App_Code \ IdentityModels.cs) adalah
sumber
Dalam kasus saya, berjalan di VS 2013 C #, MVC 5.2.2, menggunakan ASP.NET Identity 2.0, solusinya adalah memperbarui konstruktor ApplicationUserManager di dalam App_Start \ IdentityConfig.cs seperti:
sumber
Saya memiliki masalah yang sama, ketika saya mencoba mengubah kode untuk membuat UserName adalah nama asli orang tersebut dan bukan email sistem tunjukkan pesan kesalahan yang sama "Nama pengguna ABC DEF tidak valid, hanya dapat berisi huruf atau angka . " Saya memecahkan masalah menambahkan karakter spasi (Dalam kasus saya di akhir) ke AllowedUserNameCharacters.
Saya menggunakan Asp.Net Core 2.2 dan VS2017
Ini kode saya
Buka Startup.cs dan edit atau tambahkan baris di bawah "// pengaturan pengguna":
sumber
Jika Anda menggunakan formulir web ASP.Net dan mencoba untuk melakukannya, cukup buka file IdentityModels.vb / cs Anda dan di bawah Public Class UserManager, lihat seperti ini:
sumber
Untuk pengguna AspNet.Identity.Core 2.1 dan yang lebih baru, validator di UserManager ini hanya dapat dibaca. Alamat email sebagai nama pengguna diperbolehkan secara default, tetapi jika Anda membutuhkan penyesuaian lebih lanjut dari karakter dalam nama pengguna Anda, Anda dapat melakukannya di Startup.cs seperti ini:
(Saya membutuhkan '/' untuk alasan warisan.)
sumber
Karena mengkodekan ApplicationUserManager saya sendiri: kelas UserManager tidak berfungsi untuk saya (mungkin karena saya menggunakan Razor Pages, bukan MVC), inilah solusi lain: Di Startup.cs di CofigureServices () Anda dapat mengonfigurasi Opsi Identitas, misalnya:
Selengkapnya tentang topik ini di Microsoft Docs: https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2
sumber
Jika Anda tidak dapat menemukan IdentityConfig.cs, ganti konstruktor AccountController Anda dengan kode ini.
sumber
Dalam kasus saya, saya memiliki kelas repositori yang bekerja dengan otentikasi, yang tidak mengizinkan saya menggunakan "-" di dalam nama pengguna .. Perbaikannya ada di dalam konstruktor di sini:
sumber
Saya juga terjebak dengan ini karena sebagian besar waktu nama pengguna adalah E-mail akhir-akhir ini, saya dapat memahami alasan bidang E-mail terpisah. Ini murni pemikiran / pengalaman saya karena saya juga tidak dapat menemukan pendapat Microsoft tentang hal ini.
Ingat, Asp Identity murni untuk mengidentifikasi seseorang, Anda tidak perlu memiliki E-mail untuk diidentifikasi, tetapi mereka mengizinkan kami untuk menyimpannya karena itu merupakan bagian dari identitas. Saat Anda membuat proyek web baru di studio visual, Anda diberi opsi untuk opsi otentikasi.
Jika Anda memilih jenis proyek yang tidak kosong seperti MVC dan menyetel otentikasi ke "Akun perorangan", Anda akan diberikan dasar-dasar dasar untuk manajemen pengguna. Salah satunya termasuk sub kelas yang terlihat seperti ini dalam App_Start \ IdentityConfig.cs:
Hal ini memberitahu kita bahwa Microsoft bermaksud kita untuk menyimpan nama pengguna yang lebih kompleks (lihat AllowOnlyAlphaNumericUserNames = false), jadi sebenarnya kita memiliki sinyal campuran.
Fakta bahwa ini dihasilkan dari proyek web default memberi kita indikasi / arahan yang baik dari Microsoft (dan cara yang bersih) untuk memungkinkan kita memasukkan email untuk bidang nama pengguna. Ini bersih karena metode pembuatan statis digunakan dalam App_Start \ Startup.Auth.cs saat melakukan bootstrap aplikasi dengan konteks Microsoft.OWIN.
Satu-satunya kelemahan dari pendekatan ini adalah Anda akhirnya menyimpan E-mail dua kali .... Yang tidak baik!
sumber
Seperti yang mungkin sudah Anda ketahui (dan diharapkan), ASP.NET Identity 2.0.0, dirilis Maret 2014, menambahkan fungsionalitas ini dalam kerangka kerja.
Pengumuman: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
Contoh dan tutorial lengkap, termasuk konfirmasi akun: http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
sumber
Jika Anda menggunakan IOC (saya menggunakan StructureMap) di pengontrol akun Anda, Anda perlu menerapkan perbaikan yang disebutkan di atas oleh Hao Kung ketika Usermanager diteruskan: (Saya harus). Mungkin ada cara untuk melakukannya di penyiapan IOC, tetapi saya tidak tahu caranya.
sumber
Saya menghadapi masalah yang sama. tetapi akhirnya saya menyelesaikan masalah dengan menambahkan bagian bawah ke metode saya, bukan konstruktor.
sumber