ฉันก็ติดอยู่กับสิ่งนี้เช่นกันเพราะเวลาส่วนใหญ่ชื่อผู้ใช้เป็นอีเมลในปัจจุบันฉันสามารถเข้าใจเหตุผลของฟิลด์อีเมลแยกต่างหากได้ นี่เป็นความคิด / ประสบการณ์ของฉันล้วนๆเนื่องจากฉันไม่พบคำพูดของ Microsoft ในเรื่องนี้
โปรดจำไว้ว่า Asp Identity มีไว้เพื่อระบุตัวตนของใครบางคนเท่านั้นคุณไม่จำเป็นต้องมีอีเมลเพื่อระบุตัวตน แต่พวกเขาอนุญาตให้เราจัดเก็บได้เนื่องจากเป็นส่วนหนึ่งของข้อมูลประจำตัว เมื่อคุณสร้างโปรเจ็กต์เว็บใหม่ใน Visual Studio คุณจะได้รับตัวเลือกสำหรับตัวเลือกการพิสูจน์ตัวตน
หากคุณเลือกประเภทโครงการที่ไม่ว่างเปล่าเช่น MVC และตั้งค่าการตรวจสอบสิทธิ์เป็น "บัญชีส่วนบุคคล" คุณจะได้รับพื้นฐานพื้นฐานสำหรับการจัดการผู้ใช้ หนึ่งในนั้นรวมถึงคลาสย่อยที่มีลักษณะเช่นนี้ภายใน App_Start \ IdentityConfig.cs:
// Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
//N.B rest of code removed
}
สิ่งนี้บอกเราว่า Microsoft ตั้งใจให้เราจัดเก็บชื่อผู้ใช้ที่ซับซ้อนมากขึ้น (อ้างถึง AllowOnlyAlphaNumericUserNames = false) ดังนั้นเราจึงมีสัญญาณผสมกัน
ความจริงนี้สร้างขึ้นจากโครงการเว็บเริ่มต้นทำให้เรามีข้อบ่งชี้ / ทิศทางที่ดีจาก Microsoft (และวิธีที่สะอาด) เพื่อให้เราสามารถป้อนอีเมลสำหรับฟิลด์ชื่อผู้ใช้ มันสะอาดเนื่องจากใช้วิธีการสร้างแบบคงที่ภายใน App_Start \ Startup.Auth.cs เมื่อบูตแอปพลิเคชันด้วยบริบท Microsoft.OWIN
ข้อเสียอย่างเดียวของวิธีนี้คือคุณเก็บอีเมลไว้สองครั้ง .... ซึ่งไม่ดี!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;