2017-01-19 1 views
1

J'ai un processus en deux étapes lorsque vous reconnecter à un utilisateur avec une application client sur le site WordPressWordPress Nonce ne vérifiant pas

1ère étape: application client appelle l'URL API du site WordPress, il crée un nonce et retourne le jeton de nonce à l'application.

$nonce = wp_create_nonce("my-action"); 

2ème étape: application client charge le site WordPress en utilisant une vue Web avec une requête GET dont le nonce dans un paramètre GET. Puis vérifie le nonce. J'ai simulé cela, avec Postman et un navigateur de bureau. Mais le nonce ne peut pas être vérifié. Ça échoue toujours.

C'est là que je crée nonce

if(username_exists($username)){ 
      $user = get_user_by('login', $username); 

      $result['status'] = "already_registered"; 

      $token = sha1(date('H:i')); 
      $result['token'] = $token; 

      $result['nonce'] = wp_create_nonce("my-action"); 

      return $result; 

     } 

C'est là que je vérifie ... nonce

function userAuth(){ 

    echo $_GET['token']; 

    $nonce = wp_verify_nonce($_GET['token'], 'my-action'); 

    //Do more things based on above verification 

} 

Toute idée de ce qui ne va pas?

+0

publiez le code où vous rendez réellement le nonce (champ et

). – yivi

+0

Où imprimez-vous votre nonce? Où est votre formulaire de saisie? – yivi

+0

Pas de formulaire de saisie. J'utilise GET variable pour le passer comme ça ... 'http: // apidemo /? Token = 03b7c4cab0 & username = 333' – TharinduLucky

Répondre

0

J'ai eu la situation lorsque wp_verify_nonce() sur mon site WP de serveur en direct n'a jamais retourné vrai. Et en même temps, la copie du site (code identique) sur mon serveur de scène a validé cela tout le temps.

Problème était la même page avec la forme comprenant le nonce était ouvert deux fois (dans différentes fenêtres Chrome) à partir de la même URL de site en direct. La deuxième copie de la page a été ouverte beaucoup plus tard que la première (disons 15 minutes plus tard). Et j'ai oublié que le premier qui était ouvert (qui avait généré le différent nonce comme étant lié à l'heure précédente), essayait d'obtenir le formulaire de page plus jeune non vérifié sans succès.

La raison était wp_verify_nonce() comparé le plus jeune page avec le plus ancien en quelque sorte.

I.e. wp_create_nonce(), j'ai répété sur mon backend pour tester le problème, m'a donné deux nonces identiques. Celui dans le champ de formulaire caché que j'ai envoyé via AJAX et le différent dans mon gestionnaire de serveur AJAX à côté de la ligne de vérification wp_verify_nonce(). Le réseau Ctrl-F5 + ouvert Chrome Dev Tools avec le cache désactivé n'a aucun effet. Les nonces étaient différents.

Dès que j'ai fermé l'ancienne page et effacé le cache pour la nouvelle page, le nonce a vérifié à vrai.