it-swarm.com.de

Wie kann ich ein Ajax-Anmeldeformular für FORCE_SSL_ADMIN aktivieren?

Ich arbeite an einer Site, die einen https-geschützten Administrationsbereich und einen sicheren Front-End-Bereich benötigt, in dem private Informationen angezeigt werden. Meine Präferenz für die Benutzeranmeldung ist ein Ajax-fähiges Widget, das auf jeder Seite der Site angezeigt werden kann, aber ich kann es nicht zum Laufen bringen, wenn gesendete Formulardaten von den nicht gesicherten Seiten an die Anmeldeseite übergeben werden.

Ich habe mit dem Login With Ajax Plugin begonnen, das mit ein paar Modifikationen zum größten Teil gut mit SSL funktioniert, und es funktioniert einwandfrei, wenn ich mich von einer Seite aus anmelde, auf die über https zugegriffen wird ... und auch funktioniert einwandfrei, wenn FORCE_SSL_ADMIN deaktiviert ist. Wenn ich jedoch versuche, mich über das Widget auf einer nicht gesicherten Seite mit FORCE_SSL_ADMIN anzumelden, kann ich keine Antwort vom Server erhalten.

Gibt es Plugins, die dieses Problem lösen? Und wenn nicht, hat jemand irgendwelche Lösungen? Vielleicht ist eine gesicherte Form, die in einem iframe eingebettet ist, meine bisher beste Idee ... ich denke nur, dass es einen einfacheren Weg geben muss.

* Bearbeiten: Kopfgeld anbieten *

Ich füge dieser Frage ein Kopfgeld hinzu, weil ich immer noch neugierig bin. Ich habe das in meinem Projekt umgangen, indem ich einfach auf das Widget verzichtet und einen Link zur wp-Login-Seite angezeigt habe. Die Möglichkeit, ein sicheres Anmeldeformular in eine nicht sichere Seite einzubetten, ist jedoch eine viel bessere Lösung. Ich werde die Prämie an alle vergeben, die Code zeigen können, der das ermöglicht, oder mich auf ein Plugin hinweisen, das dies bereits tut.

6
goldenapples

WordPress dieffrence für hhtp und https und wenn Sie das AJAX mit den Standardfunktionen von WP aufrufen, dann ist ein AJAX Registrierungsformular möglich. Vielleicht sehen Sie das Plugin-Formular in diesem Tutorial: http://www.wpajax.com/code/ Ich denke, dies ist die Lösung für Sie.

2
bueltge

Ich hatte ein ähnliches Problem und es stellte sich heraus, dass alles davon abhing, wie die Funktion wp_signon( $credentials, $secure_cookie ) aufgerufen wurde.

Ich möchte, dass alles auf meiner Website nach der Anmeldung https lautet, daher ist ein nicht sicheres Cookie von Nutzen.

In meinem Code von vor ssl war: wp_signon ($ credentials, false)

also habe ich geändert:

wp_signon( $credentials, false )

zu

wp_signon( $credentials, true )

Dadurch wird ein sicherer Cookie erstellt, und jetzt ist alles in Ordnung.

Ich kann mir vorstellen, dass Plugin-Entwickler versuchen, sich auf FORCE_SSL_ADMIN zu verlassen, um das sichere Cookie zu setzen. Verwenden Sie in Ihrem Fall wp_signon( $credentials, false ). Ich hoffe es löst das Problem.

2
Tobias Beuving

Es gibt Möglichkeiten, dies zu tun. so zum Beispiel. Ich vermute, dass bei der Anmeldung mit Ajax nicht alle in diesem Artikel beschriebenen Techniken verwendet werden und dass sie von einigen Browsersicherheitsfunktionen blockiert wird. Wenden Sie sich an den Entwickler und schlagen Sie Verbesserungen mit einem Verweis auf diesen Artikel vor.

2
dgw

Ich habe mir das Plugin nicht angesehen, aber ich vermute, dass es die Anmelde-URL ohne https in der Ajax-Anfrage fest codiert. Das wp-Anmeldeformular funktioniert einwandfrei in seiner Nicht-https-Version zusammen mit einer Formularaktion, die auf die Verwendung von https eingestellt ist. Daher kann ich wirklich nicht verstehen, warum Ajax nicht funktioniert.

Wenn das Ändern des Plugins nicht möglich ist, können Sie folgende Ansätze ausprobieren:

Eine Frage, die sich für den Haken von wp_footer lohnt. Suchen Sie nach der ID des Anmeldeformulars und ändern Sie dessen URL, z. B .: $(ID).attr('action', newValue);

(Ich bin nicht 100, aber es wird funktionieren, da ich mich vage an jQuery-Husten bei Formular-Tags erinnere, wenn ich die Methode oder Aktion eines Formulars ändere.)

Ein zweiter Ansatz, wenn die URL im HTML-Code des Anmeldeformulars, aber nicht im Ajax-Aufruf angezeigt wird, besteht darin, einen Ausgabepuffer für wp_head und str_replace() die URL zu starten.

Ein dritter Ansatz, wenn die tatsächliche URL im js-Skript als Parameter angezeigt wird, besteht darin, ihren Wert in wp_footer zu überschreiben, wie dies im Plug-in für Auto-Thickbox für die in wp verwendeten Bild-URLs der Fall ist.

Eine letzte Möglichkeit, wenn das Skript ein unordentlicher Spaghetti-Code mit der Anmelde-URL ist, die in Funktionsaufrufen fest codiert ist, besteht darin, ihn mit wp_dequeue_script() zu entschlüsseln und Ihre eigene Version zu aktivieren, um ihn zu ersetzen. Beachten Sie die Prioritäten, wenn Sie dies tun: Ihre wp_print_scripts Aktion sollte offensichtlich nach der des Plugins stattfinden.

2

Ich hatte ein ähnliches Problem mit einem AJAX Plugin.

Nach einem Vorschlag auf https://stackoverflow.com/questions/6301076/wordpress-single-page-ssl , fügte dies der wp-config.php-Datei hinzu:

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

Dann habe ich die bestimmte Seite (mit dem AJAX -Ding) gezwungen, nur https: // zu sein (dafür gibt es Plugins).

1