webentwicklung-frage-antwort-db.com.de

Laravel-Kennwortüberprüfungsregel

Wie füge ich eine Validierungsregel für Passwörter hinzu?

Validierungsregel:

Das Passwort enthält Zeichen aus mindestens drei der folgenden fünf Kategorien:

  • Englische Großbuchstaben (A - Z)
  • Englische Kleinbuchstaben (a - z)
  • Basis 10 Ziffern (0 - 9)
  • Nicht alphanumerisch (Beispiel:!, $, # Oder%)
  • Unicode-Zeichen

Wie füge ich die obige Regel in der Validatorregel hinzu?

Mein Code hier

// create the validation rules ------------------------
    $rules = array(
        'name'             => 'required',                        // just a normal required validation
        'email'            => 'required|email|unique:ducks',     // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'           // required and has to match the password field
    );

    // do the validation ----------------------------------
    // validate against the inputs from our form
    $validator = Validator::make(Input::all(), $rules);

    // check if the validator failed -----------------------
    if ($validator->fails()) {

        // get the error messages from the validator
        $messages = $validator->messages();

        // redirect our user back to the form with the errors from the validator
        return Redirect::to('home')
            ->withErrors($validator);

    }
25
Bharanikumar

Ich habe ein ähnliches Szenario in Laravel gehabt und es auf folgende Weise gelöst.

Das Passwort enthält Zeichen aus mindestens drei der folgenden fünf Kategorien:

  • Englische Großbuchstaben (A - Z)
  • Englische Kleinbuchstaben (a - z)
  • Basis 10 Ziffern (0 - 9)
  • Nicht alphanumerisch (Beispiel:!, $, # Oder%)
  • Unicode-Zeichen

Zuerst müssen wir einen regulären Ausdruck erstellen und ihn validieren.

Ihr regulärer Ausdruck würde so aussehen:

^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$

Ich habe es auf this site getestet und validiert. Führen Sie Ihre eigenen Schritte jedoch auf Ihre Weise aus und passen Sie sie entsprechend an. Dies ist nur ein Beispiel für einen Regex, den Sie nach Ihren Wünschen einstellen können.

Ihr endgültiger Laravel-Code sollte also so aussehen: 

'password' => 'required|
               min:6|
               regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|
               confirmed',

Update Wie @NikK in den Kommentaren erwähnt, sollte der Kennwortwert in Laravel 5.6 in eckigen Klammern in Array eingeschlossen sein

'password' => ['required', 
               'min:6', 
               'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/', 
               'confirmed']

Ich habe es nicht auf Laravel 5.6 getestet, daher vertraue ich auf @NikK, daher habe ich mich inzwischen mit c #/.net beschäftigt und habe nicht viel Zeit für Laravel.

Hinweis: 

  1. Ich habe es sowohl auf der Site für reguläre Ausdrücke als auch in einer Laravel 5-Testumgebung getestet und validiert, und es funktioniert.
  2. Ich habe min: 6 verwendet, dies ist optional, aber es ist immer eine gute Praxis, eine Sicherheitsrichtlinie zu haben, die verschiedene Aspekte widerspiegelt, von denen einer die minimale Passwortlänge ist.
  3. Ich empfehle Ihnen, das bestätigte Passwort zu verwenden, um sicherzustellen, dass der Benutzer das korrekte Passwort eingibt. 
  4. Innerhalb der 6 Zeichen sollte unser Regex mindestens 3 von a-z oder A-Z sowie Nummer und Sonderzeichen enthalten.
  5. Testen Sie Ihren Code immer in einer Testumgebung, bevor Sie mit der Produktion beginnen.
  6. Update: Was ich in dieser Antwort getan habe, ist nur ein Beispiel für ein reguläres Passwort

Einige Online-Referenzen

Bezüglich Ihrer benutzerdefinierten Validierungsnachricht für die Regex-Regel in Laravel sind hier einige Links, die Sie betrachten können:

Klingt nach einem guten Job für reguläre Ausdrücke. 

Laravel-Validierungsregeln unterstützen reguläre Ausdrücke. Sowohl die 4.X- als auch die 5.X-Version unterstützen es:

Das könnte auch helfen:

http://www.regular-expressions.info/unicode.html

3
Matthew Way

Dies entspricht nicht ganz den OP-Anforderungen, obwohl es hoffentlich hilft. Mit Laravel können Sie Ihre Regeln in einem einfach zu pflegenden Format definieren.

    $inputs = [
        'email'    => 'foo',
        'password' => 'bar',
    ];

    $rules = [
        'email'    => 'required|email',
        'password' => [
            'required',
            'string',
            'min:10',             // must be at least 10 characters in length
            'regex:/[a-z]/',      // must contain at least one lowercase letter
            'regex:/[A-Z]/',      // must contain at least one uppercase letter
            'regex:/[0-9]/',      // must contain at least one digit
            'regex:/[@$!%*#?&]/', // must contain a special character
        ],
    ];

    $validation = \Validator::make( $inputs, $rules );

    if ( $validation->fails() ) {
        print_r( $validation->errors()->all() );
    }

Würde ausgeben:

    [
        'The email must be a valid email address.',
        'The password must be at least 10 characters.',
        'The password format is invalid.',
    ]

(Die Regex-Regeln teilen sich standardmäßig eine Fehlermeldung - d. H. Vier fehlgeschlagene Regex-Regeln führen zu einer Fehlermeldung.)

0
James