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?
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
add_user_meta
Funktionupdate_user_meta
Funktionget_user_meta
FunktionUm 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;
}
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;
}
Wenn die Bearbeitung des gesamten Codes ein wenig entmutigend erscheint, gibt es ein gutes Plugin dafür:
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.