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

9 feb 2011, 20:24:49
Vistas: 15.7K
Votos: 17

Estoy utilizando un plugin modificado para mis propósitos.

Lo que busco es que después de que el usuario se registre, inicie sesión automáticamente y lo redirija a la página actual. Actualmente les envía un correo electrónico con su nombre de usuario y contraseña. Luego tienen que iniciar sesión usando esos datos.

4
Comentarios

¿Estás usando el formulario de registro predeterminado o uno personalizado?

Bainternet Bainternet
9 feb 2011 20:46:50

Uno personalizado pero está basado en redirecciones, por lo que los códigos diseñados para trabajar con el sistema predeterminado podrían funcionar, y si no, probablemente pueda modificarlo para que lo haga.

Robin I Knight Robin I Knight
9 feb 2011 20:57:35

Creo que debo señalar que iniciar sesión automáticamente a un usuario durante el registro evita parte de la seguridad del 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 necesita registrarse, recibir un correo electrónico y luego iniciar sesión. Si eliminas el paso del correo electrónico, tus usuarios podrían registrarse con direcciones falsas, iniciar sesión automáticamente y poder acceder al backend, comentar o lo que sea que tus suscriptores predeterminados puedan hacer. ¿Quién se beneficiaría? Los spammers, por ejemplo. A los hackers también les encantaría buscar agujeros en tu backend sin tener que dar una dirección que podría ser reveladora.

s_ha_dum s_ha_dum
27 may 2013 02:08:59

Un blog detallado: http://sforsuresh.in/auto-login-wordpress/

Suresh Kamrushi Suresh Kamrushi
9 ene 2018 12:44:01
Todas las respuestas a la pregunta 4
2
10

Básicamente, para iniciar sesión de un usuario puedes usar:

            //Iniciar sesión del usuario
    $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 tienes la contraseña y el usuario
así que puedes crear tu propio formulario de registro, procesarlo y crear el usuario tú mismo

//Solo después de validar todo, proceder con la creación del usuario
        //Crear el usuario
        $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 );

        /*Enviar correo al administrador y al nuevo usuario - 
        Podrías crear tu propio correo en lugar de usar esta función*/
        wp_new_user_notification( $user_id, $user_pass );

y aquí tenemos tanto el usuario como la contraseña, así que puedes iniciar sesión del usuario.

Espero que esto ayude

9 feb 2011 21:39:51
Comentarios

¿No existe un filtro de registro al que se pueda enganchar?

Zack Zack
9 feb 2011 22:30:20

Complicado, veré si puedo integrarlo. Entonces no hay una manera más fácil. Supongo que WordPress no tiene interés en proporcionar un cómodo get_the_password() ya que lo envía por correo.

Robin I Knight Robin I Knight
9 feb 2011 23:00:09
1

No hay un lugar ideal para engancharse en el proceso de registro. Creo que hay un buen argumento para añadir un gancho de acción de evento de registro de usuario al núcleo. Pero creo que podrías simularlo mientras tanto. Una de las últimas cosas que ocurren cuando un usuario se registra exitosamente 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 se establezca.

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

function mi_auto_login( $metaid, $userid, $key, $value ) {
    // Solo nos interesa el evento de recordatorio de contraseña. Ignorar cualquier otra cosa.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Establecer las variables del usuario actual y darle una cookie.
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

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

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

25 feb 2011 00:06:09
Comentarios

¿user_register no sería un buen lugar para enganchar esto, crees?

jsims281 jsims281
2 sept 2011 13:28:20
1

Acabo de conseguir que esa funcionalidad funcione utilizando el hook user_register y el siguiente código en mi archivo functions.php:

// Iniciar sesión automáticamente a un usuario que acaba de registrarse       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );
2 sept 2011 13:15:41
Comentarios

¿Debería seguir enviando un correo electrónico para confirmar el registro? Ya no estoy recibiendo esto.

codecowboy codecowboy
27 sept 2011 11:37:16
1
function login_after_register($userlogin,$userpass){
    // Credenciales para el inicio de sesión
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

    // Verificar si la conexión es SSL
    $secure_cookie = is_ssl();

    // Aplicar filtros para la cookie segura
    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

    // Autenticar al usuario y establecer la cookie de autenticación
    $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);
}
27 may 2013 00:52:49
Comentarios

Por favor, proporciona explicaciones junto con tu código.

s_ha_dum s_ha_dum
27 may 2013 01:47:59