Enregistrement de l'utilisateur suivi d'une connexion automatique


15

J'utilise un plugin modifié à mes fins.

Ce que je recherche, c'est après que l'utilisateur s'est enregistré pour qu'il se connecte automatiquement et les renvoie à la page actuelle. Pour le moment, il leur envoie un e-mail avec leur nom d'utilisateur et leur mot de passe. Ils doivent ensuite se connecter en utilisant ces informations.


utilisez-vous le formulaire d'inscription par défaut ou un formulaire personnalisé?
Bainternet

Personnalisé mais basé sur des redirections, les codes conçus pour fonctionner avec le système par défaut peuvent très bien fonctionner, et sinon je peux probablement le modifier.
Robin I Knight

Je pense que je dois souligner que la connexion automatique d'un utilisateur lors de l'inscription contourne une partie de la sécurité de connexion. Normalement, un utilisateur ne peut pas se connecter sans fournir une adresse e-mail valide. L'utilisateur doit s'inscrire, recevoir un e-mail, puis se connecter. Si vous supprimez l'étape de l'e-mail, vos utilisateurs pourraient s'inscrire avec de fausses adresses, se connecter automatiquement et pouvoir accéder au backend, commenter, quoi que vos abonnés par défaut puissent faire. Qui en bénéficierait? Les spammeurs, par exemple. Les pirates informatiques aimeraient également chercher des trous dans votre backend sans avoir à donner une adresse qui pourrait être révélatrice.
s_ha_dum

Réponses:


10

Fondamentalement, pour connecter un utilisateur, vous pouvez utiliser:

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

mais ce n'est que lorsque vous avez le mot de passe et la connexion que vous pouvez créer votre propre formulaire d'inscription et le traiter et créer l'utilisateur vous-même

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

et ici, nous avons à la fois un identifiant et un mot de passe pour que vous puissiez vous connecter.

J'espère que cela t'aides


2
N'y a-t-il pas un filtre d'enregistrement qui peut être accroché?
Zack

1
Tricky, je vais voir si je peux l'intégrer. Il n'y a donc pas de moyen plus simple. Je suppose que wordpress n'a aucun intérêt à fournir un bon get_the_password () pratique car il envoie cela par e-mail.
Robin I Knight

5

Il n'y a pas d'endroit idéal pour se connecter au processus d'inscription. Je pense qu'il y a de bonnes raisons d'ajouter un crochet d'action d'événement d'enregistrement d'utilisateur au noyau. Mais je pense que vous pourriez être en mesure de faire semblant, en attendant. L'une des dernières choses qui se produit lorsqu'un utilisateur s'enregistre avec succès est la création d'une option utilisateur nommée 'default_password_nag'. Nous pouvons créer une action pour surveiller cela et configurer l'utilisateur lorsqu'il est défini.

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 testé, mais devrait fonctionner, en théorie.

Maintenant que nous avons une idée de ce qu'il faut faire, je pense que c'est une mauvaise idée, du point de vue de la sécurité. Les gens peuvent créer des comptes indésirables sans même avoir à passer par la mise en place d'une boîte de dépôt de courrier indésirable. :)


1
user_register est un bon endroit pour se connecter, pour cela je pense?
jsims281

1

Je viens de réussir à faire fonctionner cette fonctionnalité en utilisant le hook user_register et le code suivant dans mon functions.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' );

Cela devrait-il quand même envoyer un e-mail pour confirmer l'inscription? Je ne reçois plus ça.
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
Veuillez fournir des explications avec votre code.
s_ha_dum
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.