E-Mail-Überprüfung für neue Nutzer

Ich möchte ein Plugin implementieren, das neue Benutzer dazu verpflichtet, auf eine E-Mail zu antworten, um ihre E-Mail-Adresse bei der Registrierung zu überprüfen. Ich mache bereits umfangreiche Codex-Recherchen, aber ich bin sehr neu und würde mich über einige Hinweise freuen, insbesondere dahingehend, dass ich den Nutzer inaktiv halte, bis er seine E-Mails verifiziert hat. Den Rest werde ich alleine schaffen.

Solutions Collecting From Web of "E-Mail-Überprüfung für neue Nutzer"

Ich hatte ein sehr ähnliches Problem, das ich neulich getriggers habe. In meinem Fall wollte ich Benutzern erlauben, ihr eigenes Passwort zu wählen, und dann ihr Konto per E-Mail aktivieren. Es gibt eine Menge dazu, also werde ich nur beschreiben, wie ich die E-Mail-Verifizierung erreicht habe.

Zuerst habe ich user_register (läuft, wenn ein Benutzer registriert ist) und einen Schlüssel erstellt (z. B. die Uhrzeit, die E-Mail-Adresse und die zufällige Zeichenfolge des Benutzers) und diesen Schlüssel in der usermeta-Tabelle gespeichert. Dies wird gelöscht, wenn der Benutzer seinen Account aktiviert.

Um zu verhindern, dass sich ein nicht aktivierter Benutzer anmeldet, habe ich der Anmeldung zusätzliche Prüfungen hinzugefügt, indem ich die Hook- authenticate . Zum Beispiel:

Bearbeiten Wie in den Kommentaren angegeben, sollte der authenticate ein WP_Error Objekt für einen Fehler zurückgeben, andernfalls null zurückgeben. wp_authenticate_username_password nach dieser function ausgeführt. Wenn ein WP_User Objekt übergeben wird, führt es keine Authentifizierungsprüfungen durch und nimmt an, dass sie ausgeführt wurden.

Der bearbeitete Code gibt zurück, was an ihn übergeben wurde, oder ein WP_Error Objekt, wenn der Aktivierungsschlüssel existiert (dh der Benutzer muss sein Konto noch nicht aktivieren).

 add_filter( 'authenticate', 'wpse32218_check_for_key', 10, 3 ); function wpse32218_check_for_key( $user, $username, $password ){ $user_obj = get_user_by('login', $username ); if ($username!=''){ $value = get_user_meta($user->ID, 'confirmed', true); if($value!=null){ $user = new WP_Error( 'denied', __("ERROR: You need to activate your account.".$value."") );//create an error remove_action('authenticate', 'wp_authenticate_username_password', 20); //key found - don't proceed! } } return $user; } 

(Sie können shake_error_codes , um das Login-Feld zu zittern, wenn der Schlüssel gefunden wird, wenn Sie shake_error_codes : D).

Dann müssen Sie in Ihrem Plug-In wp_new_user_notification überschreiben (dies ist eine Pluggable-function in /wp_includes/pluggable.php ). Diese function sendet die E-Mail an den neuen Benutzer und an den Administrator.

Kopiere die function in dein Plugin, drinnen

 if ( !function_exists('wp_new_user_notification') ) : //Define your wp_new_user_notification function here endif; 

und dann passen Sie es an, sodass es den Aktivierungsschlüssel in der Nachricht an den Benutzer abruft und enthält.

Für das Projekt, an dem ich gearbeitet habe, habe ich einen Link vom Aktivierungsschlüssel erstellt, auf den der Benutzer klicken kann, um seinen Account zu aktivieren. ZB wenn ihr Schlüssel 01234ABCDE war: http://www.example.com?confirm=01234ABCDE .

Mit dem Filter query_vars habe ich die Variable ‘confirm’ mit WordPress registriert. Dann, mit dem template_include Filter, confirm.php ich den Benutzer immer, wenn diese Variable gesetzt ist (zB wie oben), auf confirm.php (eine Template-Datei, die sich in meinem Themen-Verzeichnis befindet).

Diese Vorlage versucht, den Benutzer mit dem entsprechenden Schlüssel abzurufen. Wenn es sie findet, löscht es den Schlüssel. Sie sind jetzt aktiviert und können sich einloggen. Ist dies nicht der Fall, wird eine Fehlermeldung angezeigt (Schlüssel existiert nicht oder Konto wurde aktiviert). Wenn mehrere Benutzer denselben Aktivierungsschlüssel haben (das sollte nicht sein!), Kommt es ebenfalls zu einem Fehler.