Benutzerregistrierung gefolgt von automatischem Login


15

Ich verwende ein für meine Zwecke modifiziertes Plugin.

Ich bin danach, nachdem der Benutzer sich dafür registriert hat, um sie automatisch anzumelden und zur aktuellen Seite zurückzukehren. Momentan sendet es ihnen eine E-Mail mit ihrem Benutzernamen und Passwort. Sie müssen sich dann mit diesen Daten anmelden.


Verwenden Sie das Standard-Registrierungsformular oder ein benutzerdefiniertes?
Bainternet

Eine benutzerdefinierte Version, die jedoch auf Weiterleitungen basiert, sodass Codes, die für das Standardsystem entwickelt wurden, möglicherweise funktionieren. Andernfalls kann ich sie wahrscheinlich ändern.
Robin I Knight

Ich denke, ich sollte darauf hinweisen, dass die automatische Anmeldung eines Benutzers bei der Registrierung einen Teil der Anmeldesicherheit umgeht. Normalerweise kann sich ein Benutzer nicht anmelden, ohne eine gültige E-Mail-Adresse anzugeben. Der Benutzer muss sich registrieren, eine E-Mail erhalten und sich dann anmelden. Wenn Sie den E-Mail-Schritt entfernen, können sich Ihre Benutzer mit gefälschten Adressen registrieren, automatisch angemeldet werden und in das Back-End gelangen. Wer würde davon profitieren? Zum einen Spammer. Hacker würden auch gerne nach Löchern in Ihrem Backend stöbern, ohne eine Adresse angeben zu müssen, die aufschlussreich sein könnte.
s_ha_dum

Antworten:


10

Grundsätzlich können Sie zum Anmelden eines Benutzers Folgendes verwenden:

            //Login the user
    $creds = array();
    $creds['user_login'] = $login;
    $creds['user_password'] = $password;
    if ( !empty( $remember ) ){ 
        $creds['remember'] = true;
    }
    $user = wp_signon( $creds, true );

Dies ist jedoch nur möglich, wenn Sie das Kennwort und den Benutzernamen haben, sodass Sie Ihr eigenes Registrierungsformular erstellen und es bearbeiten und den Benutzer selbst erstellen können

//Only after Everything has been validated, proceed with creating the user
        //Create the user
        $user_pass = wp_generate_password();
        $user = array(
            'user_login' => $username,
            'user_pass' => $user_pass,
            'first_name' => $firstname,
            'last_name' => $lastname,
            'user_email' => $email
        );
        $user_id = wp_insert_user( $user );

        /*Send e-mail to admin and new user - 
        You could create your own e-mail instead of using this function*/
        wp_new_user_notification( $user_id, $user_pass );

und hier haben wir sowohl Login als auch Passwort, so dass Sie den Benutzer anmelden können.

Hoffe das hilft


2
Gibt es nicht einen Registrierungsfilter, der angehängt werden kann?
Zack

1
Tricky, ich werde sehen, ob ich es integrieren kann. Einfacher geht es nicht. Ich nehme an, dass WordPress kein Interesse daran hat, ein nettes, praktisches get_the_password () bereitzustellen, da es dies per E-Mail versendet.
Robin I Knight

5

Es gibt keinen idealen Ort, um sich am Registrierungsprozess zu beteiligen. Ich denke, es gibt gute Gründe, dem Core einen Aktions-Hook für Benutzerregistrierungsereignisse hinzuzufügen. Aber ich denke, Sie könnten es in der Zwischenzeit vortäuschen. Eines der letzten Dinge, die passieren, wenn sich ein Benutzer erfolgreich registriert, ist die Erstellung einer Benutzeroption mit dem Namen 'default_password_nag'. Wir können eine Aktion erstellen, um darauf zu achten, und den Benutzer einrichten, wenn er eingerichtet ist.

add_action('update_user_metadata', 'my_auto_login', 10, 4);

function my_auto_login( $metaid, $userid, $key, $value ) {
    // We only care about the password nag event. Ignore anything else.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Set the current user variables, and give him a cookie. 
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

Ungetestet, sollte aber theoretisch funktionieren.

Jetzt, da wir eine Idee haben, was zu tun ist, denke ich, dass dies aus Sicherheitsgründen eine schlechte Idee ist. Benutzer können Junk-Konten erstellen, ohne die Mühe machen zu müssen, eine Junk-E-Mail-Dropbox einzurichten. :)


1
user_register ist ein guter Ort, um sich anzumelden, denke ich?
jsims281

1

Ich habe es gerade geschafft, diese Funktionalität mit dem user_register-Hook und dem folgenden Code in meiner functions.php zum Laufen zu bringen :

// auto log in a user who has just signed up       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );

Sollte dies dennoch eine E-Mail senden, um die Registrierung zu bestätigen? Ich erhalte das nicht mehr.
Codecowboy

0
function login_after_register($userlogin,$userpass){
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

    $secure_cookie = is_ssl();

    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

    $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    do_action('wp_login', $user->user_login, $user);
}

1
Bitte erläutern Sie dies zusammen mit Ihrem Code.
s_ha_dum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.