web-dev-qa-db-fra.com

Utiliser `auth_redirect`: continue à me demander de me connecter même quand je suis connecté

J'essaie d'utiliser auth_redirect pour rediriger automatiquement les visiteurs non connectés lorsque vous visitez ensuite une page spécifique. Voici le code que j'utilise:

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

La redirection fonctionne (je vois la page de connexion), mais lorsque je me connecte, je vois à nouveau la page de connexion. Il n’existe aucun moyen d’accéder à la page protégée car le navigateur ne cesse de la rediriger vers la page de connexion.

J'ai vu cette question et sa réponse de @chrisguitarguy et modifier mon code en ceci:

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

Ce code a résolu mon problème: un utilisateur connecté peut désormais accéder à la page. La question est: pourquoi ne peut-on pas simplement utiliser auth_redirect?

3
Fabien Quatravaux

Le problème est que cette fonction est normalement utilisée dans le backend. Pour l'utiliser dans le frontal, vous devez ajouter le filtre suivant:

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

Alors, auth_redirect() fonctionnera comme prévu: redirigez les utilisateurs vers le formulaire de connexion s'ils ne sont pas connectés.

3
Fabien Quatravaux

Le problème était que vous vous mettiez dans une boucle. Votre bloc de code original disait que si je visitais cette page, envoyez-moi à la page de connexion. Après vous être connecté, il est retourné à la page. Depuis la page que vous visitez maintenant, accédez à la page de connexion. Tour et tour vous allez!

Le nouveau bloc vérifie d’abord si vous êtes connecté ou non. Si non, alors et alors seulement, il regarde pour voir quelle page vous visitez. Si vous n'êtes pas connecté, vous êtes envoyé là-bas et, une fois connecté, renvoyé. Maintenant que vous êtes connecté, vous voyez la page.

Avoir un sens?

0
G H

Vous avez des problèmes avec auth_redirect () uniquement sur mobile.

Après quatre jours - j'ai écrit une solution qui fonctionne et qui n'a pas besoin de 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 );
0
RyanPaul.ca