web-dev-qa-db-fra.com

Comment puis-je faire en sorte qu'un formulaire de connexion Ajax fonctionne avec FORCE_SSL_ADMIN activé?

Je travaille sur un site nécessitant une zone d'administration sécurisée https et une zone frontale sécurisée, ainsi que des informations confidentielles. Ma préférence pour la connexion utilisateur est un widget compatible Ajax qui peut être affiché sur toutes les pages du site, mais je ne parviens pas à le faire fonctionner lorsque les données de formulaire soumises des pages non sécurisées sont transmises à la page de connexion.

J'ai commencé par utiliser le plug-in Login With Ajax qui, avec quelques modifications, fonctionne bien avec SSL pour la plupart, et fonctionne correctement lors de la connexion à partir d'une page accessible via https ... et également fonctionne bien lorsque FORCE_SSL_ADMIN est désactivé. Mais lorsque vous essayez de vous connecter à partir du widget sur une page non sécurisée avec FORCE_SSL_ADMIN activé, je ne peux pas obtenir de réponse du serveur.

Existe-t-il des plugins existants qui résolvent ce problème? Et si non, quelqu'un a des solutions? Peut-être qu'un formulaire sécurisé intégré à un iframe est ma meilleure idée jusqu'à présent… pensant simplement qu'il doit y avoir un moyen plus simple.

* Edit: Offrir des primes *

J'ajoute une prime à cette question parce que je suis toujours curieux. J'ai résolu ce problème dans mon projet en abandonnant le widget et en affichant un lien vers la page wp-login. Mais être en mesure d'intégrer un formulaire de connexion sécurisé sur une page non sécurisée serait une bien meilleure solution. J'attribuerai la prime à quiconque peut montrer un code qui fonctionnerait pour que cela se produise, ou m'indiquer un plugin qui le fait déjà.

6
goldenapples

WordPress met en oeuvre pour hhtp et https et lorsque vous appelez le AJAX avec les fonctions par défaut de WP qu’un formulaire de enregistrement AJAX est possible. Peut-être que vous voyez le formulaire de plug-in de ce tutoriel: http://www.wpajax.com/code/ Je pense que c'est la solution pour vous.

2
bueltge

J'ai eu un problème similaire, et il s'est avéré que tout dépendait de la manière dont la fonction wp_signon( $credentials, $secure_cookie ) était appelée.

Je souhaite que tout sur mon site soit https après la connexion, de sorte qu'un cookie non sécurisé est tout à fait utilisable.

Dans mon code d'avant ssl était: wp_signon ($ credentials, false)

alors j'ai changé:

wp_signon( $credentials, false )

à

wp_signon( $credentials, true )

Ce qui crée un cookie sécurisé et maintenant tout va bien.

Je peux imaginer que les développeurs de plug-ins tentent de s'appuyer sur FORCE_SSL_ADMIN pour définir le cookie sécurisé. Essayez d'utiliser wp_signon( $credentials, false ) dans votre cas. J'espère que cela résoudra le problème.

2
Tobias Beuving

Il y a des façons de le faire. de cette façon , par exemple. Mon hypothèse est que Login With Ajax n'utilise pas toutes les techniques décrites dans cet article et qu'une fonctionnalité de sécurité du navigateur le bloque. Essayez de prendre contact avec le développeur et de suggérer des améliorations, avec un pointeur sur cet article.

2
dgw

Je n'ai pas regardé le plugin, mais je suppose qu'il est difficile de coder l'URL de connexion sans https dans la requête Ajax. Le formulaire de connexion wp fonctionne correctement dans sa version non https avec une action de formulaire configurée pour utiliser https. Par conséquent, je ne vois vraiment pas pourquoi Ajax ne fonctionnerait pas.

Si le changement de plug-in n'est pas une option, vous pouvez essayer les approches suivantes:

L’un serait un peu de bonté jquery sur le hook wp_footer. Recherchez l'ID du formulaire de connexion et modifiez son URL, par exemple: $(ID).attr('action', newValue);

(Je ne suis pas 100, ça va marcher, cependant, car je me souviens vaguement d'avoir toussé sur les balises de formulaire lorsque je changeais la méthode ou l'action d'un formulaire.)

Une deuxième approche, si l'URL apparaît dans le code HTML du formulaire de connexion mais pas dans son appel Ajax, serait de démarrer un tampon de sortie sur wp_head et str_replace() l'URL.

Une troisième approche, si l'URL réelle apparaît dans le script js en tant que paramètre, consiste à remplacer sa valeur dans wp_footer, comme dans le plug-in auto-thickbox pour les URL d'image utilisées dans wp.

Une dernière option, si le script est du code spaghetti en désordre avec l'URL de connexion codée en dur dans les appels de fonction, consiste à le mettre en file d'attente à l'aide de wp_dequeue_script() et à mettre en file d'attente votre propre version pour la remplacer. Attention aux priorités si vous faites cela: votre action wp_print_scripts devrait, évidemment, se produire après celle du plugin.

2
Denis de Bernardy

J'ai eu un problème similaire avec un plugin AJAX.

Après une suggestion sur https://stackoverflow.com/questions/6301076/wordpress-single-page-ssl , a ajouté ceci au fichier wp-config.php:

if( !empty($_SERVER['HTTPS']) ) {
define( 'WP_SITEURL', 'https://yourdomain.com' );
define( 'WP_HOME', 'https://yourdomain.com' );
}

Ensuite, j'ai forcé la page spécifique (avec la chose AJAX) à n'être que https: // (il existe des plugins pour cela).

1