Hinzufügen eines zusätzlichen Authentifizierungsfelds auf der Anmeldeseite

7

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

Ich habe das Layout der Anmeldeseite geändert wp-login.phpund 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 machen?

nomall
quelle

Antworten:

13

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

Auch Sie sollten Wordpress aktualisieren, weil es oft Sicherheitsupdates enthalten wird. (Es wurde kürzlich berichtet, dass es eine Reihe von Angriffen auf Websites mit veralteten WordPress-Versionen gegeben hat.)

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

Um ein zusätzliches Feld auf Ihrer Anmeldeseite zu erstellen, können Sie den login_formAktions-Hook 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 Metaschlüssel gespeichert haben my_ident_code. Sie sollten dies tun, anstatt eine eigene Spalte zu erstellen! . Siehe die Codex-Seiten für

Um einen Benutzer zu überprüfen, können Sie den authenticateFilter verwenden. Dies übergibt den eingegebenen Benutzernamen und das Passwort. Wenn der Identifikationscode korrekt ist, kehren Sie zurück null, damit WordPress das Passwort und den Benutzernamen überprüfen kann. Wenn es nicht korrekt ist, entfernen Sie die WordPress-Authentifizierung und geben Sie einen Fehler zurück. Dadurch wird der Benutzer zur Anmeldeseite zurückgedrängt, 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;
}
Stephen Harris
quelle
2

Diese Antwort dient nur zu Referenzzwecken.

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

Im Folgenden wird beschrieben, wie WordPress den Überprüfungsprozess für das Anmeldekennwort gemäß Zeile 250 der /wp-includes/class-phpass.phpDatei abwickelt:

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

    return $hash == $stored_hash;
}
Manimaran
quelle
0

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

Cimy Extra Felder

Oder Sie könnten die Verwendung von Theme My login in Betracht ziehen, was dies kann, aber einige Codierungen erfordert. Es fügt auch einiges an zusätzlicher Funktionalität hinzu. Sie können diese beiden Plugins gerne zusammen verwenden.

sein Preis
quelle