Come posso personalizzare il nome utente di Asp.net Identity 2 già preso il messaggio di convalida (Nome XYZ è già occupato)? GrazieCome personalizzare il nome utente di Asp.net Identity 2 già preso il messaggio di convalida?
risposta
Bene, non ho trovato alcuna soluzione semplice a questo problema. E per semplice intendo modificare un messaggio in un attributo/modello/controllore.
Una possibile soluzione potrebbe essere:
Dopo l'esecuzione
var result = await UserManager.CreateAsync(user, model.Password);
Nel caso in cui il risultato non è successo si può verificare è Errori proprietà per la "è già preso Nome XYZ". pattern e sostituirlo con il tuo messaggio personalizzato.
Un'altra soluzione (questo è il mio modo preferito) è quello di scrivere una classe personalizzata UserValidation
:
/// <summary>
/// Validates users before they are saved to an IUserStore
/// </summary>
/// <typeparam name="TUser"></typeparam>
public class CustomUserValidator<TUser> : UserValidator<TUser, string>
where TUser : ApplicationUser
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="manager"></param>
public CustomUserValidator(UserManager<TUser, string> manager) : base(manager)
{
this.Manager = manager;
}
private UserManager<TUser, string> Manager { get; set; }
/// <summary>
/// Validates a user before saving
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public override async Task<IdentityResult> ValidateAsync(TUser item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
var errors = new List<string>();
await ValidateUserName(item, errors);
if (RequireUniqueEmail)
{
await ValidateEmail(item, errors);
}
if (errors.Count > 0)
{
return IdentityResult.Failed(errors.ToArray());
}
return IdentityResult.Success;
}
private async Task ValidateUserName(TUser user, List<string> errors)
{
if (string.IsNullOrWhiteSpace(user.UserName))
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.PropertyTooShort, "Name"));
}
else if (AllowOnlyAlphanumericUserNames && !Regex.IsMatch(user.UserName, @"^[[email protected]_\.]+$"))
{
// If any characters are not letters or digits, its an illegal user name
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.InvalidUserName, user.UserName));
}
else
{
var owner = await Manager.FindByNameAsync(user.UserName);
if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id, user.Id))
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.DuplicateName, user.UserName));
}
}
}
// make sure email is not empty, valid, and unique
private async Task ValidateEmail(TUser user, List<string> errors)
{
if (!user.Email.IsNullOrWhiteSpace())
{
if (string.IsNullOrWhiteSpace(user.Email))
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.PropertyTooShort, "Email"));
return;
}
try
{
var m = new MailAddress(user.Email);
}
catch (FormatException)
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.InvalidEmail, email));
return;
}
}
var owner = await Manager.FindByEmailAsync(user.Email);
if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id, user.Id))
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.DuplicateEmail, email));
}
}
}
Si può vedere che per tutte le Risorse messaggi di errore di validazione in uso, quindi specificando un formato personalizzato nella vostra risorse sarete in grado di personalizzare tali messaggi.
È possibile registrare il validatore in ApplicationUserManager
classe, Create
metodo:
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
manager.UserValidator = new CustomUserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
È incredibile che sia necessario implementare il proprio validatore per modificare una stringa. –
E non vedo nemmeno come sia possibile sostituire il messaggio di errore senza creare un nuovo 'IdentityResult' dato che' Errors' è un oggetto IEnumerable di sola lettura. – im1dermike
Quando provo questo ho l'errore "Risorse" inaccessibile a causa del suo livello di protezione ". Se controllo la classe Microsoft.AspNet.Identity.Resources è contrassegnata come interna. – Ogglas
Il modo più semplice per aggiungere la vostra proprietà per ApplicationUser
classe come:
public class AppUser:IdentityUser
{
public string MyUserName{get; set;}
}
Basta personalizzare il tuo metodo di AddErrors
come questo :
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
if (error.StartsWith("Name"))
{
var NameToEmail= Regex.Replace(error,"Name","Email");
ModelState.AddModelError("", NameToEmail);
}
else
{
ModelState.AddModelError("", error);
}
}
}
- 1. Problema con messaggio di convalida del nome utente nell'identità asp.net
- 2. Come personalizzare il messaggio di errore dell'attributo di convalida?
- 3. Come personalizzare il messaggio di errore di convalida JSF
- 4. Come personalizzare il messaggio di errore di OAuthAuthorizationServerProvider?
- 5. Ruby on Rails: come personalizzare il messaggio di errore di convalida?
- 6. Come personalizzare il nome di build Jenkins?
- 7. ASP.NET Identity 2 to 3
- 8. personalizzare messaggio jQuery convalida e markup
- 9. Come configurare il server Thinktecture Identity v3 beta 1-2 con ASP.NET Identity?
- 10. MVC4: Imposta manualmente il messaggio di convalida dal lato server
- 11. ASP.NET Il messaggio di convalida MVC non viene localizzato
- 12. Dove ha preso il nome il segmento di testo?
- 13. C# asp.net come nome utente
- 14. Intervallo di codice di sicurezza ASP.Net Identity 2, Two Factor
- 15. ASP.net Identity 2.0 Disconnetti un altro utente
- 16. Nome app iTunes preso
- 17. ASP.NET come ValidationGroup che utilizza il plugin di convalida JQuery?
- 18. L'identità di ASP.NET utilizza l'e-mail anziché il nome utente
- 19. diversi tipi di utente in ASP.Net Identity 2.0
- 20. Come modificare la convalida della password in ASP.Net MVC Identity 2?
- 21. Qualcuno sa come B-Tree ha preso il suo nome?
- 22. Come personalizzare la finestra di messaggio
- 23. Come disabilitare un utente in Identity 2.0?
- 24. Aggiungere nome utente e cognome a un ID 2 ASP.NET?
- 25. jQuery convalida il messaggio di errore di visualizzazione nel div
- 26. Come invalidare .AspNet.ApplicationCookie dopo aver aggiunto l'utente al ruolo utilizzando Asp.Net Identity 2?
- 27. ASP.NET MVC 3 Convalida remota per consentire il valore originale
- 28. convalida di espressioni regolari javascript per il nome di dominio?
- 29. Database di semi per Identity 2
- 30. test di integrazione ASP.NET 5 Identity
I thin k devi dare un'occhiata al modello di identità e capire se c'è qualche attributo speciale per quello. Oppure guarda il controller account – qamar
@qamar. In questo caso specifico si sbaglia perché tutti i messaggi sono incorporati nelle risorse Identity –