Usando 'auth_redirect': me sigue pidiendo que inicie sesión incluso cuando estoy conectado

3

Estoy tratando de usar auth_redirect para redirigir automáticamente a los visitantes que no hayan iniciado sesión cuando visiten una página específica. Aquí está el código que utilizo:

add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(is_page($pageid)) auth_redirect();
}

La redirección funciona (veo la página de inicio de sesión), pero cuando inicio sesión, veo la página de inicio de sesión nuevamente. No hay forma de acceder a la página protegida porque el navegador sigue redirigiéndolo a la página de inicio de sesión.

Vi esta pregunta y su respuesta desde @chrisguitarguy y modifico mi código a esto:

add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(!is_user_logged_in() && is_page($pageid)) {
    $url = add_query_arg(
        'redirect_to',
        get_permalink($pageid),
        site_url('wp-login.php')
    );
    wp_redirect($url);
    exit;
}

Este código solucionó mi problema: un usuario conectado ahora puede acceder a la página. La pregunta es: ¿por qué no se puede usar simplemente auth_redirect ?

    
pregunta Fabien Quatravaux 28.01.2013 - 02:00

4 respuestas

3

El problema es que esta función se usa normalmente en el backend. Para usarlo en la interfaz, debe agregar el siguiente filtro:

add_filter( 'auth_redirect_scheme', 'wpse16975_check_loggedin' );
function wpse16975_check_loggedin(){
    return 'logged_in';
}

Entonces auth_redirect() funcionará como se esperaba: redirigir a los usuarios al formulario de inicio de sesión si no han iniciado sesión.

    
respondido por el Fabien Quatravaux 31.07.2013 - 01:31
0

El problema fue que te metiste en un bucle. Su código de bloqueo original, dijo que si visitaba esta página, envíeme a la página de inicio de sesión. Después de iniciar sesión, regresó a la página, la cual, dado que ahora está visitando la página, accede a la página de inicio de sesión. ¡Vueltas y vueltas!

El nuevo bloque primero verifica si has iniciado sesión o no. Si no es así, entonces y solo entonces se ve para ver qué página está visitando. Si no ha iniciado sesión, se le enviará allí y, después de iniciar sesión, se le devolverá. Ahora, desde que inició sesión, puede ver la página.

¿Tiene sentido?

    
respondido por el G H 29.02.2016 - 16:40
0

Ha tenido problemas con auth_redirect () solo en dispositivos móviles.

Después de cuatro días, escribí una solución que funciona y no necesita auth_redirect.

global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
if( !is_user_logged_in() ) { wp_redirect( home_url() . '/wp-login.php?redirect_to='. $current_url );
    
respondido por el RyanPaul.ca 03.10.2017 - 20:30
-1

Consulte al final de this

if (! is_user_logged_in())
    auth_redirect();
    
respondido por el alec 13.01.2014 - 18:16

Lea otras preguntas en las etiquetas