« You are attempting to log out of MySite »

« You are attempting to log out of MySite »

Comment se prendre la tête pendant quelques minutes/heures…
Je m’explique, après avoir réalisé des corrections sur mon projet, je me rend compte les jours qui viennent que lorsque l’on se délogue de l’espace membre, nous arrivons sur un page ou l’on nous dit que « j’essaye de me déconnecter et si j’en suis sûr »…, en gros le genre de page qui t’énerve.

attempting_to_log

 

D’ou ca vient ?

  • Pas de mise à jour de WordPress sans m’en parler !
  • Pas du navigateur !
  • Pas des modules du navigateur !
  • Mais d’ou cela peut il venir..??

Cause :

Le logout fait appel à la fonction wp_logout_url() qui renvoit à wp-login.php?action=logout&...

[pastacode lang= »php » message= »wp-login.php » highlight= » » provider= »manual »]

...
case 'logout' :
	check_admin_referer('log-out');
	wp_logout();

	$redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?loggedout=true';
	wp_safe_redirect( $redirect_to );
	exit();
...

[/pastacode]

Dans la fonction check_admin_referer(), nous avons wp_nonce_ays($action) qui affiche notre page.

[pastacode lang= »php » message= »check_admin_referer » highlight= » » provider= »manual »]

if ( !function_exists('check_admin_referer') ) :
function check_admin_referer($action = -1, $query_arg = '_wpnonce') {
	if ( -1 == $action )
		_doing_it_wrong( __FUNCTION__, __( 'You should specify a nonce action to be verified by using the first parameter.' ), '3.2' );

	$adminurl = strtolower(admin_url());
	$referer = strtolower(wp_get_referer());
	$result = isset($_REQUEST[$query_arg]) ? wp_verify_nonce($_REQUEST[$query_arg], $action) : false;
	if ( !$result && !(-1 == $action && strpos($referer, $adminurl) === 0) ) {
		wp_nonce_ays($action);
		die();
	}

	do_action( 'check_admin_referer', $action, $result );
	return $result;
}
endif;

[/pastacode]

Contournement :

La fonction ne se créé seulement si elle n’existe pas déjà, donc il nous suffit de la créer :

[pastacode lang= »php » message= »check_admin_referer2″ highlight= » » provider= »manual »]

function check_admin_referer(){
    return true;
}

[/pastacode]

Seulement ce n’est qu’une verrue pour empêcher cet affichage et ne nous explique pas le pourquoi du comment…

Solution :

J’ai décidé de regardé mon code modifié ces derniers jours et je me rend compte d’une chose :

[pastacode lang= »php » message= »bourde » highlight= »6″ provider= »manual »]

<li><a href="
<?php 
echo wp_logout_url(
        site_url(ptw_users::$login_page) 
    ); ?>
/">
<span class="icon-off"></span> Log out</a></li>

[/pastacode]

J’ai ajouté un slash à la fin du lien. Ce qui a entraîné d’ajouter un slash sur mon nonce et donc de la fausser…  Grrrrrr, 1 heure de perdue.


2 commentaires sur “« You are attempting to log out of MySite »”

  • 1
    Mark le 11 janvier 2015

    What is the definitive solution?

    • 2
      madvic le 11 janvier 2015

      In the last section of my code, line 6. I added a slash at the end of my url.
      The slash was added to the « nonce » and therefore never validated it.
      Just human error….

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *