WordPress Auto Login von E-Mail Link

Ich erstelle eine Mitgliedschaftsseite, auf der ich versuche, einen bestimmten Benutzer über einen Link an seine E-Mail-Adresse anzumelden.

Ich habe einen benutzerdefinierten Beitrag namens “Mitglieder”, wo ich einen eindeutigen Schlüssel mit dem Namen “user_key” gespeichert habe. Nach einem bestimmten Vorgang wird die E-Mail mit einem Link für die automatische Anmeldung an diesen Benutzer gesendet.

Ein Beispiel Link sieht wie folgt aus

http://example.com/process/?key=DcP2K7cmBUrLVRjizs78RAuuoMGRFc6F6TMDm6E6

process ist die Seite, die den Login-Teil behandelt. Hier ist der Code, der auf dieser Seite verwendet wird.

get_header(); $key = $_GET['key']; $args = array( 'post_type' => 'member', 'meta_value' => $key ); $properties = new WP_Query($args); if($properties->have_posts()) : while($properties->have_posts()) : $properties->the_post(); $author = $post->post_author; $user = get_user_by('ID', $author); $user_id = $user->ID; echo $user_id; wp_set_current_user($user_id, $loginusername); wp_set_auth_cookie($user_id); do_action('wp_login', $loginusername); wp_redirect( home_url() ); endwhile; endif; wp_reset_query(); get_footer(); 

Wenn ich zu diesem bestimmten Link gehe, erhalte ich den folgenden Fehler.

“Warnung: Header-Informationen können nicht geändert werden – bereits gesendete Header”

Von dem, was ich verstehe, ich denke, es ist der “wp_set_auth_cookie” Teil, der getan wird, nachdem die Header geladen werden, die dieses Problem verursacht.

Irgendjemand hat irgendwelche Ideen, wie man es repariert?

Solutions Collecting From Web of "WordPress Auto Login von E-Mail Link"

Sie können Header nicht senden, nachdem bereits eine Ausgabe erfolgt ist. Wenn Sie Inhalte hinzufügen möchten, die bei fehlgeschlagener Weiterleitung angezeigt werden sollen, fügen Sie die Kopf- und Fußzeile in den entsprechenden Codeblock ein:

 //login code //if redirect happens, code execution halts, so there is no need for an if else get_header(); //error message get_footer(); 

Ein besserer Ansatz wäre, die user_id in der URL zu haben (vielleicht nicht einmal einen einfachen Text $code = get_user_meta( $user_id, 'activation_account_token', true ); und das Token vom Benutzer zu überprüfen ist dasselbe – für diese Frage nicht möglich) .

Der Grund für den Fehler ist dieses echo $user_id;

 wp_clear_auth_cookie(); wp_set_current_user ( $user->ID ); wp_set_auth_cookie ( $user->ID ); wp_redirect( home_url() ); 

Sie sollten nichts ausgeben, bevor die Weiterleitung stattfindet.

Aktualisiert

Sie haben einige Möglichkeiten, wie Sie mit der Weiterleitung umgehen können:

Innerhalb der Motivvorlage bewegt sich der Weiterleitungscode über dem get_header();

function.php / Plugin

Eine bessere Option ist die Verwendung von wp_loaded , das ausgetriggers wird, bevor HTML ausgegeben wird.

 add_action ('wp_loaded', 'login_redirect'); function login_redirect() { if ( isset( $_GET['key'] ) ) { $user = get_users(array( 'meta_key' => 'key_or_the_name_you_use', 'meta_value' => $_GET['key'] , 'number' => 1, )); if(count($user) == 1){ $user_id =$user[0]->ID; wp_clear_auth_cookie(); wp_set_current_user ( $user_id ); wp_set_auth_cookie ( $user_id ); wp_redirect( home_url() ); exit; } } } 

Dies ist, was Sie tatsächlich tun können, aber ich denke, dass Sie meine Antwort falsch gelesen haben, da die Benutzer-ID die Sicherheit erhöhen kann, um sie nicht zu verringern.

Durch das Einschließen der user_id kann die Benutzer-ID mit dem Token verknüpft werden, so dass jemand, der URLs zwangsweise zum Anmelden veranlasst, die zufällige Zeichenfolge mit dem Benutzer-ID-Konto abgleichen muss (was die Branche tatsächlich tut) – mit mehr Sicherheit Kontrollen.

Javascript

echo "";

Dies kann in der Position von wp_redirect ausgegeben werden, damit der Browser die Umleitung vornimmt.

Da dies jedoch ein Browser-Redirect-Benutzer ist, kann die Ausführung von Javascript oder Weiterleitungen blockiert sein.