users – El inicio de sesión automático de WordPress después del registro no funciona

Pregunta:

Busqué un montón de hilos tratando de averiguar cómo iniciar sesión automáticamente a un usuario después del registro, y se me ocurrió esto.

function automatically_log_me_in( $user_id ) {
    $user = get_user_by('id',$user_id);
    $username = $user->user_nicename;
    $user_id = $user->ID;
    wp_set_current_user($user_id, $username);
    wp_set_auth_cookie($user_id);
    do_action('wp_login', $username, $user);
    exit;
}
add_action( 'user_register', 'automatically_log_me_in' );

De acuerdo con muchas respuestas que he visto, wp_set_auth_cookie y wp_set_current_user sí solos deberían ser suficientes para iniciar la sesión de un usuario por ID, pero incluso esto no está haciendo nada.

¿Alguien tiene alguna idea de lo que estoy haciendo mal?

Respuesta:

Respuesta corta : su función original (en su mayoría) funciona. Esta es su función editada para hacer lo que necesita hacer:

function automatically_log_me_in( $user_id ) {
    wp_set_current_user( $user_id );
    wp_set_auth_cookie( $user_id );
    wp_redirect( home_url( '/some-ending-page/' ) );
    exit(); 
}
add_action( 'user_register', 'automatically_log_me_in' );

Respuesta larga : aquí hay una explicación de por qué esta es la respuesta.

La sugerencia de wp_signon() no lo hará. Necesita las credenciales de usuario para eso, y salvo que se pasen las credenciales, esa función intentará recuperar el nombre de usuario ('log') y la contraseña ('pwd') publicados del formulario y supongo que 'pwd' faltaría.

Las otras respuestas hacen sugerencias que, lamentablemente, no se aplican en este caso específico. Varias son sugerencias que son específicas del complemento. Como desarrollador de uno de esos (WP-Members), por mucho que me gustaría que usara ese complemento, sugerir que use wpmem_post_register_data no le sirve de nada si no está usando WP-Members.

Usar wp_set_current_user() como su pensamiento original es la forma correcta de hacerlo; pero debe redirigir al usuario al final para que se vea como conectado.

La acción user_register pasa el ID del usuario recién registrado, por lo que no estoy seguro de por qué cambiaría el valor de $user_id configurándolo en $user->ID cuando ya tiene el valor. Y la única razón para obtener el objeto de usuario en su función original es obtener el nombre de usuario. Este es un argumento opcional para wp_set_current_user() y la acción wp_login , así que ni siquiera me molestaría en eso. (Me wp_login acción wp_login porque todo lo que está haciendo es poner un gancho en su proceso para que las funciones externas se conecten. Ya sea que desee / necesite, esto requiere más información de la que proporciona su OP). código, IMO.

¿Su proceso de registro finaliza en este punto? La cookie de autenticación está configurada y el usuario ha iniciado sesión. Sin embargo, eso no se leerá hasta la siguiente solicitud de página, por lo que debe redirigir al usuario a la página en la que desea que termine usando wp_redirect() después de lo cual debe exit() .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım