Tôi cũng bị mắc kẹt với điều này vì hầu hết thời gian tên người dùng là E-mail ngày nay, tôi có thể hiểu lý do của một trường E-mail riêng biệt. Đây hoàn toàn là suy nghĩ / kinh nghiệm của tôi vì tôi cũng không thể tìm thấy ý kiến của Microsoft về điều này.
Hãy nhớ rằng, Asp Identity hoàn toàn là để nhận dạng một ai đó, bạn không cần phải có E-mail để được nhận dạng nhưng họ cho phép chúng tôi lưu trữ nó vì nó tạo thành một phần của danh tính. Khi bạn tạo một dự án web mới trong studio trực quan, bạn được cung cấp tùy chọn cho các tùy chọn xác thực.
Nếu bạn chọn loại dự án không trống, chẳng hạn như MVC và đặt xác thực thành "Tài khoản cá nhân" thì bạn sẽ được cung cấp các nền tảng cơ bản để quản lý người dùng. Một trong số đó bao gồm một lớp con trông giống như thế này trong 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
}
Điều này cho chúng ta biết là Microsoft dự định chúng ta lưu trữ những tên người dùng phức tạp hơn (tham khảo AllowOnlyAlphaNumericUserNames = false), vì vậy chúng tôi thực sự có các tín hiệu hỗn hợp.
Thực tế là điều này được tạo ra từ một dự án web mặc định cho chúng tôi một chỉ dẫn / hướng dẫn tốt từ Microsoft (và một cách rõ ràng) để cho phép chúng tôi nhập E-mail cho trường tên người dùng. Nó rõ ràng vì phương thức tạo tĩnh được sử dụng trong App_Start \ Startup.Auth.cs khi khởi động ứng dụng bằng ngữ cảnh Microsoft.OWIN.
Mặt trái duy nhất của phương pháp này là bạn phải lưu trữ E-mail hai lần .... Điều đó không tốt!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;