2014-09-16 14 views
5

ho creato un validatore password come segue:RequireNonLetterOrDigit non correttamente convalidato

manager.PasswordValidator = new PasswordValidator 
{ 
    RequiredLength = 8, 
    RequireNonLetterOrDigit = false, 
    RequireDigit = false, 
    RequireLowercase = true, 
    RequireUppercase = true, 
}; 

Ma, una password come ad esempio Testing123 è considerato non valido:

Le password devono avere almeno una non la lettera o un carattere cifre .

Il messaggio di errore è abbastanza chiaro, si dice che la password deve avere almeno una lettera non o carattere cifre. Bene, ho 3 cifre. Quindi cosa c'è che non va? Quando aggiungo una lettera non

+0

Forse cercavi RequireNonLetterOrDigit = true? – divega

risposta

10

Sia il nome che documentation di questa proprietà sono ambigui. Questo dovrebbe essere:

Ottiene o imposta se la password richiede un carattere che non è una lettera e non una cifra.

+0

Questo ha senso. Grazie! – jao

1
public class CustomPasswordValidator : PasswordValidator 
{ 
    public override async Task<IdentityResult> ValidateAsync(string password) 
    { 
     var requireNonLetterOrDigit = base.RequireNonLetterOrDigit; 
     base.RequireNonLetterOrDigit = false; 
     var result = await base.ValidateAsync(password); 

     if (!requireNonLetterOrDigit) 
      return result; 

     if (!Enumerable.All<char>((IEnumerable<char>)password, new Func<char, bool>(this.IsLetterOrDigit))) 
      return result; 

     // Build a new list of errors so that the custom 'PasswordRequireNonLetterOrDigit' could be added. 
     List<string> list = new List<string>(); 
     foreach (var error in result.Errors) 
     { 
      list.Add(error); 
     } 
     // Add our own message: (The default by MS is: 'Passwords must have at least one non letter or digit character.') 
     list.Add("Passwords must have at least one character that is neither a letter or digit. (E.g. '£ $ %^_ etc.')"); 
     result = await Task.FromResult<IdentityResult>(IdentityResult.Failed(string.Join(" ", (IEnumerable<string>)list))); 

     return result; 
    } 
} 
+1

Alcune spiegazioni sarebbero utili – Anton

Problemi correlati