Ben de buna sıkışıp kaldım çünkü bu günlerde çoğu zaman kullanıcı adları E-postalardan oluşuyor, yine de ayrı bir E-posta alanının nedenini anlayabiliyorum. Bunlar tamamen benim düşüncelerim / deneyimlerim, çünkü Microsoft'un bu konuda söylediklerini de bulamadım.
Unutmayın, Asp Identity yalnızca birini tanımlamak içindir, tanımlanacak bir E-postanız olması gerekmez, ancak bir kimliğin bir parçasını oluşturduğu için saklamamıza izin verir. Visual Studio'da yeni bir web projesi oluşturduğunuzda, kimlik doğrulama seçenekleri için bir seçenek sunulur.
MVC gibi boş olmayan bir proje türü seçerseniz ve kimlik doğrulamasını "Bireysel hesaplar" olarak ayarlarsanız, bu durumda size kullanıcı yönetimi için temel temeller verilir. Bunlardan biri, App_Start \ IdentityConfig.cs içinde buna benzer bir alt sınıf içerir:
// 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
}
Bunun bize söylediği şey, Microsoft'un bizi daha karmaşık kullanıcı adlarını depolamaya niyetli olduğudur (bkz. AllowOnlyAlphaNumericUserNames = false), bu yüzden gerçekten karışık sinyaller aldık.
Bunun varsayılan bir web projesinden üretilmesi gerçeği, bize Microsoft'tan (ve temiz bir yol) kullanıcı adı alanı için E-postalar girmemizi sağlamak için iyi bir gösterge / yön sağlar. Temiz çünkü statik oluşturma yöntemi, uygulama Microsoft.OWIN bağlamıyla önyüklenirken App_Start \ Startup.Auth.cs içinde kullanılır.
Bu yaklaşımın tek olumsuz tarafı, E-postayı iki kez depolamanızdır .... Bu iyi değil!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;