Registro de usuario seguido de inicio de sesión automático


15

Estoy usando un complemento modificado para mis propósitos.

Lo que busco es después de que el usuario se haya registrado para iniciar sesión automáticamente y devolverlos a la página actual. Por el momento, les envía un correo electrónico con su nombre de usuario y contraseña. Luego tienen que iniciar sesión con esos detalles.


¿Está utilizando el formulario de registro predeterminado o uno personalizado?
Bainternet

Es personalizado pero se basa en redireccionamientos, por lo que los códigos diseñados para funcionar con el sistema predeterminado pueden funcionar, y si no, probablemente pueda modificarlo.
Robin I Knight

Creo que debo señalar que iniciar sesión automáticamente en un usuario en el registro evita parte de la seguridad de inicio de sesión. Normalmente, un usuario no puede iniciar sesión sin proporcionar una dirección de correo electrónico válida. El usuario debe registrarse, recibir un correo electrónico y luego iniciar sesión. Si elimina el paso de correo electrónico, sus usuarios podrían registrarse con direcciones falsas, iniciar sesión automáticamente y poder acceder al backend, comentar, lo que puedan hacer sus suscriptores predeterminados. ¿Quién se beneficiaría? Los spammers, por ejemplo. A los piratas informáticos también les encantaría buscar agujeros en tu backend sin tener que dar una dirección que pueda ser reveladora.
s_ha_dum

Respuestas:


10

Básicamente para iniciar sesión en un usuario puede usar:

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

pero eso es solo cuando tiene la contraseña y el inicio de sesión para que pueda crear su propio formulario de registro y procesarlo y crear el usuario usted mismo

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

y aquí tenemos tanto el inicio de sesión como la contraseña para que pueda iniciar sesión con el usuario.

Espero que esto ayude


2
¿No hay un filtro de registro que pueda engancharse?
Zack

1
Tricky, veré si puedo integrarlo. No hay manera más fácil entonces. Supongo que wordpress no tiene interés en proporcionar un buen get_the_password () conveniente ya que lo envía por correo electrónico.
Robin I Knight

5

No hay un lugar ideal para engancharse en el proceso de registro. Creo que hay un caso sólido para agregar un enlace de acción de evento de registro de usuario al núcleo. Pero creo que podrías fingirlo mientras tanto. Una de las últimas cosas que sucede cuando un usuario se registra con éxito es la creación de una opción de usuario llamada 'default_password_nag'. Podemos crear una acción para vigilar eso, y configurar al usuario cuando esté configurado.

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

No probado, pero debería funcionar, en teoría.

Ahora que tenemos una idea de qué hacer, opinaré que creo que es una mala idea, en cuanto a seguridad. Las personas pueden crear cuentas basura sin siquiera tener que pasar por la molestia de configurar un buzón de correo basura. :)


1
user_register es un buen lugar para conectar, ¿para esto creo?
jsims281

1

Acabo de lograr que esa funcionalidad funcione utilizando el enlace user_register y el siguiente código en mis 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' );

¿Debería esto enviar un correo electrónico para confirmar el registro? Ya no estoy recibiendo esto.
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
Proporcione explicaciones junto con su código.
s_ha_dum
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.