Registrazione utente seguita da accesso automatico


15

Sto usando un plugin modificato per i miei scopi.

Quello che sto cercando è dopo che l'utente si è registrato affinché acceda automaticamente e ritorni alla pagina corrente. Al momento invia loro un'e-mail con il loro nome utente e password. Devono quindi accedere utilizzando questi dettagli.


stai usando il modulo di registro predefinito o uno personalizzato?
Bainternet,

Uno personalizzato, ma si basa su reindirizzamenti, quindi i codici progettati per funzionare con il sistema predefinito potrebbero funzionare, e in caso contrario posso probabilmente modificarlo.
Robin I Knight,

Penso che dovrei sottolineare che l'accesso automatico di un utente alla registrazione elude parte della sicurezza dell'accesso. Di solito, un utente non può accedere senza fornire un indirizzo e-mail valido. L'utente deve registrarsi, ricevere un'e-mail, quindi accedere. Se rimuovi il passaggio e-mail, i tuoi utenti potrebbero registrarsi con indirizzi falsi, essere automaticamente connessi ed essere in grado di accedere al back-end, commentare, qualunque cosa i tuoi abbonati predefiniti possano fare. Chi ne trarrebbe beneficio? Spammer, per uno. Agli hacker piacerebbe anche cercare buchi nel backend senza dover fornire un indirizzo che potrebbe rivelare.
s_ha_dum,

Risposte:


10

Fondamentalmente per accedere a un utente è possibile utilizzare:

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

ma questo è solo quando si dispone della password e dell'accesso in modo da poter creare il proprio modulo di registro, elaborarlo e creare l'utente da soli

//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 );

e qui abbiamo sia login che password in modo da poter accedere l'utente.

Spero che sia di aiuto


2
Non esiste un filtro di registrazione che può essere agganciato?
Zack,

1
Tricky, Ill vedere se riesco a integrarlo. Allora non c'è modo più semplice. Immagino che wordpress non abbia interesse a fornire un comodo get_the_password () come lo invia via e-mail.
Robin I Knight,

5

Non esiste un luogo ideale per agganciarsi al processo di registrazione. Penso che ci sia un caso valido per aggiungere un hook di azione dell'evento di registrazione utente al core. Ma penso che potresti essere in grado di simularlo, nel frattempo. Una delle ultime cose che si verificano quando un utente si registra correttamente, è la creazione di un'opzione utente denominata 'default_password_nag'. Siamo in grado di creare un'azione per controllarlo e impostare l'utente quando è impostato.

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 );
}

Non testato, ma dovrebbe funzionare, in teoria.

Ora che abbiamo un'idea di cosa fare, mi auguro che questa sia una cattiva idea, dal punto di vista della sicurezza. Le persone possono creare account di posta indesiderata senza nemmeno dover affrontare il problema di impostare un dropbox di posta indesiderata. :)


1
user_register è un bel posto dove agganciarsi, per questo penso?
jsims281,

1

Sono appena riuscito a far funzionare quella funzionalità usando il hook user_register e il seguente codice nel mio function.php :

// 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' );

Questo dovrebbe ancora inviare una e-mail per confermare la registrazione? Non lo ricevo più.
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
Fornisci spiegazioni insieme al tuo codice.
s_ha_dum,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.