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.

Robin I Knight
la source
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
Un blog détaillé: sforsuresh.in/auto-login-wordpress
Suresh Kamrushi

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

Bainternet
la source
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. :)

Dougal Campbell
la source
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' );
jsims281
la source
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);
}
ashraf mohammed
la source
1
Veuillez fournir des explications avec votre code.
s_ha_dum