WordPress: Passwort überprüfen und Benutzer anmelden mit PHP

Gelegentlich kommt es vor, da möchte man ein eigenes Anmeldeformular für seine Benutzer bauen. Das ist glücklicherweise nicht so schwer, da WordPress hier einige Tools mit an die Hand gibt. Dazu gibt es auch zahlreiche Plugins, mit denen sich eine Anmeldung realisieren lässt. Hier erfährst du, wie du ein Passwort überprüft und anschließend einen Benutzer anmeldest.

Passwort überprüfen

Um ein Passwort zu überprüfen, nutzen wir die WordPress-Funktion wp_check_password. Mit dieser Funktion können wir das Klartext-Passwort mit dem Passwort in der Datenbank gegenprüfen.

$email    = $_POST['email'];
$password = $_POST['password'];
$user     = get_user_by( 'email', $email );

if ( $user && wp_check_password( $password, $user->data->user_pass, $user->ID ) ) {
	// Erfolg
}Code-Sprache: PHP (php)

Zuerst legen wir unsere Benutzereingaben in Variablen ab. Vorher solltest du hier noch überprüfen, ob alles sicher und richtig ist. Das habe ich hier jetzt nicht gemacht. Anschließend nutzen wir die E-Mail, um den WordPress-Benutzer zu ermitteln. Dies geht mit get_user_by.

Jetzt folgt die magische Funktion innerhalb der Anweisung, wenn die erfolgt, ist das Passwort korrekt und du kannst, die ID des Benutzers nutzen, um ihn anzumelden.

Nützliche Links:

Anmeldung mittels PHP

Um jetzt einen Benutzer anzumelden, benötigen wir die ID des Benutzers, die wir im vorherigen Teil ermittelt haben. Nun machen wir Folgendes:

wp_clear_auth_cookie();
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );Code-Sprache: PHP (php)

Zuerst stellen wir sicher, dass alle Cookies gelöscht werden, die mit der Authentifizierung von WordPress zu tun haben. Dafür nutzen wir die Funktion wp_clear_auth_cookie.

Mit wp_set_current_user setzen wir dann den aktuellen Benutzer. Hier verwenden wir die ID des Benutzers, damit WordPress auch weiß, welcher Benutzer gerade gesetzt ist.

Jetzt setzen wir erneut das Cookie für die Authentifizierung mit wp_set_auth_cookie.

Das war’s. Du kannst jetzt Weiterleitungen setzen, oder die Seite aktualisieren. Der Benutzer ist dann angemeldet und alles funktioniert wie gewollt.

Zusammenfassung

$email    = $_POST['email'];
$password = $_POST['password'];
$user     = get_user_by( 'email', $email );

if ( $user && wp_check_password( $password, $user->data->user_pass, $user->ID ) ) {
	wp_clear_auth_cookie();
	wp_set_current_user( $user->ID );
	wp_set_auth_cookie( $user->ID );
}Code-Sprache: PHP (php)