webentwicklung-frage-antwort-db.com.de

Hinzufügen eines zusätzlichen Authentifizierungsfelds auf der Anmeldeseite

Ich werde meine WordPress-Authentifizierungsseite verbessern. Meine Idee ist, einfach ein zusätzliches Feld in die Anmeldeseite einzufügen. In das zusätzliche Feld muss der Benutzer einen persönlichen Identifikationscode (4 bis 8 Ziffern) eingeben.

Ich habe das Anmeldeseitenlayout in wp-login.php geändert und eine zusätzliche Spalte zum Speichern des persönlichen Identifikationscodes in der MySQL-Datenbank hinzugefügt.

Ich weiß jedoch nicht, welcher Teil der Codierung zum Überprüfen des Kennworts verwendet wird, da ich auf die vorhandene Codierung verweisen möchte.

Wie kann ich das effektiv tun?

7
nomall

Zuallererst würde ich davon abraten, die Kerndateien zu bearbeiten , da diese beim nächsten Update von WordPress überschrieben werden.

Außerdem sollte aktualisieren Sie WordPress, da es häufig Sicherheitsupdates enthält. (Es wurde kürzlich berichtet berichtet, dass es eine Flut von Angriffen auf Websites mit veralteten WordPress-Versionen gegeben hat)

Um das zu erreichen, was Sie tatsächlich tun möchten, empfehle ich, hooks als beste Methode zum Bearbeiten von WordPress zu verwenden.

Um ein zusätzliches Feld auf Ihrer Anmeldeseite zu erstellen, können Sie den Aktions-Hook login_form verwenden:

add_action('login_form','my_added_login_field');
function my_added_login_field(){
    //Output your HTML
?>
    <p>
        <label for="my_extra_field">My extra field<br>
        <input type="text" tabindex="20" size="20" value="" class="input" id="my_extra_field" name="my_extra_field_name"></label>
    </p>
<?php
}

Als nächstes müssen wir überprüfen, ob das, was sie in das Feld eingegeben haben, mit dem übereinstimmt, was Sie gespeichert haben. Im folgenden Code habe ich angenommen, dass Sie den Identifikationscode als Benutzer-Metawert mit dem Metaschlüssel my_ident_code gespeichert haben. Sie sollten dies tun, anstatt eine eigene Spalte zu erstellen! . Siehe die Codex-Seiten für

Um einen Benutzer zu verifizieren, können Sie den Filter authenticate verwenden. Dies übergibt den eingegebenen Benutzernamen und das Passwort. Wenn der Identifizierungscode korrekt ist, geben Sie null zurück, damit WordPress das Kennwort und den Benutzernamen überprüfen kann. Wenn es nicht korrekt ist, entfernen Sie die WordPress-Authentifizierung und geben Sie einen Fehler zurück. Dies zwingt den Benutzer zurück zur Anmeldeseite, auf der der Fehler angezeigt wird.

add_filter( 'authenticate', 'my_custom_authenticate', 10, 3 );
function my_custom_authenticate( $user, $username, $password ){
    //Get POSTED value
    $my_value = $_POST['my_extra_field_name'];

    //Get user object
    $user = get_user_by('login', $username );

    //Get stored value
        $stored_value = get_user_meta($user->ID, 'my_ident_code', true);

    if(!$user || empty($my_value) || $my_value !=$stored_value){
        //User note found, or no value entered or doesn't match stored value - don't proceed.
            remove_action('authenticate', 'wp_authenticate_username_password', 20);
            remove_action('authenticate', 'wp_authenticate_email_password', 20); 

        //Create an error to return to user
            return new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
    }

    //Make sure you return null 
    return null;
}
13
Stephen Harris

Diese Antwort dient nur zu Referenzzwecken.

Sie sollten keine WordPress-Dateien bearbeiten, da Sie sonst Ihre Änderungen nach einem Update verlieren.

Im Folgenden wird beschrieben, wie WordPress den Anmeldekennwort-Überprüfungsprozess handhabt, wie in Zeile 250 der /wp-includes/class-phpass.php-Datei zu sehen ist:

function CheckPassword($password, $stored_hash)
{
    $hash = $this->crypt_private($password, $stored_hash);
    if ($hash[0] == '*')
        $hash = crypt($password, $stored_hash);

    return $hash == $stored_hash;
}
2
Manimaran

Wenn die Bearbeitung des gesamten Codes ein wenig entmutigend erscheint, gibt es ein gutes Plugin dafür:

Cimy Extra Fields

Oder Sie könnten erwägen, Theme My login zu verwenden, was dies tun kann, aber es erfordert etwas Codierung. Es fügt auch einiges an zusätzlicher Funktionalität hinzu. Sie können diese beiden Plugins gerne zusammen verwenden.

0
itsdanprice