webentwicklung-frage-antwort-db.com.de

Automatische Anmeldung nach der Registrierung

Ich möchte, dass der Benutzer automatisch angemeldet wird, ohne Benutzername und Passwort einzugeben, wenn er auf den Link in der E-Mail klickt, die nach dem Ausfüllen des Registrierungsformulars gesendet wird.

Wie kann ich das machen?

1
user3055211

Hier ist ein grundlegender Ansatz.

Zuerst müssten Sie im Link etwas übergeben, um Benutzerinformationen anzugeben, mit denen Sie den Benutzer anmelden können. Dazu müssen Sie die E-Mail filtern, die an den Benutzer gesendet wird. (Es wäre zwar möglich, eine benutzerdefinierte E-Mail für die Registrierung eines neuen Benutzers zu laden, dies müsste jedoch als Plug-In erfolgen, da diese Funktion eine steckbare Funktion ist. Stattdessen filtert diese Methode den E-Mail-Inhalt nur anhand der Betreffzeile für die Registrierungs-E-Mail.)

// Filter für Registrierungs-E-Mail-Text hinzufügen

add_filter( 'wp_mail', 'set_up_auto_login_link' );

function set_up_auto_login_link( $atts ) {

    // if the email subject is "Your username and password"
    if ( isset ( $atts ['subject'] ) && $atts['subject'] = 'Your username and password' ) {
        if ( isset( $atts['message'] ) ) {

            $old = '/wp-login.php';
            $new = '/wp-login.php?user=' . $_POST['user_login'];

            $atts['message'] = str_replace( $old, $new, $atts['message'] );
        }
    }
    return $atts;
}

Dadurch wird der ausgewählte Benutzername aus dem Registrierungsformular in Form einer Abfragezeichenfolge, die dem Anmeldelink hinzugefügt wird, in die E-Mail eingefügt. Mit diesem Benutzernamen kann der Benutzer angemeldet werden, wenn er auf den Link klickt.

Dazu habe ich mich an die Init-Aktion angeschlossen. Dadurch wird in der Abfragezeichenfolge nach dem Parameter "user" gesucht. Wenn dies der Fall ist, verwendet es get_user_by, um die Benutzerdaten anhand ihres Benutzernamens (Login) abzurufen. Wenn dies einen gültigen Benutzer zurückgibt, können wir den Benutzernamen und die abgerufene Benutzer-ID verwenden, um den Benutzer anzumelden:

add_action( 'init', 'log_user_in' );
function log_user_in() {
    if ( isset( $_GET['user'] ) ) {

        // get the username from the URL
        $user_login = $_GET['user'];

        // get the user data (need the ID for login)
        $user = get_user_by( 'login', $user_login );

        // if a user is returned, log them in
        if ( $user && ! user_can( $user->ID, 'manage_options' ) ) {
            wp_set_current_user( $user->ID, $user_login );
            wp_set_auth_cookie( $user->ID );
            do_action( 'wp_login', $user_login );
            wp_redirect( home_url() );
            exit();
        }
    }
}

Beachten Sie, dass dieser Vorgang keine wirkliche Sicherheit bietet, da sich jeder mit einem gültigen Benutzernamen als dieser Benutzer anmelden kann. Es wird überprüft, ob der angemeldete Benutzer kein Administrator ist (user_can ('manage_options')). Andernfalls kann jeder Benutzer mit Administratoranmeldung Zugriff erhalten. Es wäre ratsam, einige zusätzliche Überprüfungen einzubauen - wahrscheinlich erstellen Sie einen Schlüssel oder einen Hash, der ebenfalls zum Link hinzugefügt wird. Dies kann bei der Registrierung durchgeführt werden, um den Benutzer zu validieren.

1
butlerblog