Ich arbeite an einem Plugin, das WordPress als Single Sign On-Anbieter für eine andere Anwendung verwendet. Ich muss sicher sein, dass der Benutzer seine E-Mail-Adresse überprüft hat, indem er auf die von gesendete E-Mail antwortet wp_new_user_notification()
.
Bisher ist der beste Ansatz, den ich gefunden habe, sich in die after_password_reset
Aktion einzumischen und user_metadata hinzuzufügen, um anzuzeigen, dass die E-Mail überprüft wurde. Das funktioniert, aber alles, was mir wirklich sagt, ist, dass die reset_password
Funktion aufgerufen wurde.
Gibt es einen besseren Weg, dies zu tun?
user-registration
email-verification
Simon Cossar
quelle
quelle
empty( get_userdata( $user_id )->user_activation_key )
?reset_password
aufgerufen wurde. (reset_password
ruft anwp_set_password
, dort wird der Aktivierungsschlüssel auf '' gesetzt.)Antworten:
Ich habe verschiedene Ansätze zum Überprüfen der E-Mail-Adresse des Benutzers ausprobiert. Im Moment mache ich Folgendes:
Wenn sich ein Benutzer zum ersten Mal registriert, setzen Sie die Benutzermetadaten 'email_not_verified' des Benutzers auf 1.
Überschreiben Sie dann die
wp_new_user_notification
Funktion, damit der Anmelde-URL ein 'email_verification_key' hinzugefügt wird. Dieser Schlüssel wird auch als user_metadata gespeichert.Schließen Sie dann die Aktion 'validate_password_reset' an, um zu überprüfen, ob der E-Mail-Bestätigungsschlüssel aus der Anforderung zum Zurücksetzen des Kennworts mit dem gespeicherten Schlüssel übereinstimmt. Wenn die Schlüssel nicht übereinstimmen, löschen Sie den Benutzer und leiten Sie ihn mit dem Fehler "emailnotverified" zurück zum Registrierungsformular. Wenn die Schlüssel übereinstimmen, löschen Sie die Metadaten 'email_not_verified'.
Wenn die E-Mail nicht überprüft wurde, fügen Sie eine Nachricht hinzu, die auf der Registrierungsseite angezeigt wird, wenn der Fehler "E-Mail nicht bestätigt" auftritt.
Wenn der Benutzer innerhalb der Single Sign On-Funktion über die Metadaten 'email_not_verified' verfügt, melden Sie diese nicht bei der Clientanwendung an. (Dies kann passieren, wenn der Benutzer über ein Registrierungsformular erstellt wurde, das von einem Plugin hinzugefügt wurde.)
Ich habe auch ein Kontrollkästchen hinzugefügt, um den E-Mail-Bestätigungsstatus des Benutzers auf der Seite "Benutzer bearbeiten" anzuzeigen und zu überschreiben.
Bearbeiten:
Sich in die
validate_password_reset
Action einzumischen ist wahrscheinlich nicht der beste Weg, dies zu tun. Es wird aufgerufen, bevor das Kennwort zurückgesetzt wird, sodass die E-Mail auch dann überprüft wird, wenn beim Zurücksetzen des Kennworts Fehler auftreten (z. B. wenn der Schlüssel abgelaufen oder ungültig ist).Ein besserer Ansatz scheint darin zu bestehen, sich in die
resetpass_form
Aktion einzumischen und dem Formular zum Zurücksetzen des Kennworts ein verstecktes Feld hinzuzufügen, das den Wert des 'mail_key' enthält:Es ist dann möglich, sich an der
after_password_reset
Aktion zu beteiligen, um den gespeicherten E-Mail-Schlüssel anhand des$_POST['mail_key']
Werts zu überprüfen .Ein Beispiel-Plugin finden Sie hier: Plugin zur Überprüfung der E-Mail-Adresse
quelle
exit;
nachwp_redirect()
.exit;
nachwp_redirect()
. In dem Code, den ich tatsächlich verwende, lösche ich keinen Benutzer mehr, wenn sein 'mail_key' nicht mit dem gespeicherten Schlüssel übereinstimmt. Wenn die Schlüssel nicht übereinstimmen, wird der Benutzer erstellt, jedoch mit dem Flag "email_not_verified".Ich warf einen Blick in die
wp_usermeta
Tabelle und bemerkte dendefault_password_nag
Metaschlüssel.Ich habe nachgesehen und dies wurde vor ungefähr 7 Jahren in # 9710 eingeführt.
Wenn der Benutzer ein automatisch generiertes Kennwort hat, ist der Wert 1 und er wird auf dem Dashboard-Bildschirm angezeigt.
Wenn sie sich zum ersten Mal registriert,
default_password_nag
ist 1 und wenn sie das Passwort über den E-Mail-Link zurücksetzt, wird es 0.Sie können dies genauer untersuchen, wenn es in Ihrem Setup von Nutzen sein kann.
Andernfalls könnte man einen benutzerdefinierten Zähler oder ein Flag erstellen und im Benutzer-Meta speichern . Binden Sie sich beispielsweise in den Benutzererstellungsprozess ein und aktualisieren Sie ihn dann, wenn der Benutzer das Kennwort zurücksetzt oder sich anmeldet.
quelle
wp-login.php
.