Podczas rejestracji konta poprzez Web API za pomocą wiadomości e-mail, takiej jak "[email protected]", Fiddler zwraca następujący błąd. Pamiętaj, że adres e-mail jest również używany dla nazwy użytkownika, więc oba pola są takie same. Ale działa podczas rejestracji na samym MVC.ASP.NET MVC Identity Email/Username with Special Characters
ExceptionMessage = Niepowodzenie tworzenia użytkownika - Wyjątek tożsamości. Błędy:
Nazwa użytkownika [email protected] jest nieprawidłowa, może zawierać tylko litery lub cyfry.
obiektu użytkownika
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
IdentifyConfig.cs
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) {
RequireUniqueEmail = true,
AllowOnlyAlphanumericUserNames = false
};
Próbowałem zakomentowanie AllowOnlyAlphanumericUserNames ale to nie działa. Po ustawieniu tego ustawienia na false powinno zezwalać na znaki specjalne, w moim przypadku myślnik (-).
API Controller
// POST: api/auth/register
[ActionName("Register")]
public async Task<HttpResponseMessage> PostRegister(Auth user) {
//dash issue is here.
var userContext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userContext);
var userManager = new UserManager<ApplicationUser>(userStore);
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
var result = await userManager.CreateAsync(newUser, user.PasswordHash);
if (result.Succeeded) {
...
Rozwiązanie
nie ma zmiany IdentityConfig.cs. Tylko zmiany dotyczą mojego kontrolera API.
// POST: api/auth/register
[ActionName("Register")]
public async Task<HttpResponseMessage> PostRegister(Auth user) {
//Changed to the following line
ApplicationUserManager userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
var result = await userManager.CreateAsync(newUser, user.PasswordHash);
Dzięki za rozwiązanie! Postępowałem zgodnie z zaleceniami zawartymi w notatce. Zmieniłem moje pytanie, aby odzwierciedlić działające rozwiązanie. :) –