it-swarm.dev

Jak mohu vytvořit přihlašovací formulář Ajax s povoleným FORCE_SSL_ADMIN?

Pracuji na webu, který vyžaduje https zabezpečené admin oblasti a bezpečné front-end oblasti, stejně jako soukromé informace budou zobrazeny. Moje předvolba pro přihlášení uživatele je widget povolený Ajaxem, který může být zobrazen na každé stránce webu, ale nemohu to provést, když předávám data formuláře z nezabezpečených stránek na přihlašovací stránku.

Začal jsem pomocí pluginu Login With Ajax plugin, který s několika úpravami z velké části hraje s SSL a funguje dobře, když se přihlásíte ze stránky, ke které přistupuje https ... a také funguje, když je FORCE_SSL_ADMIN vypnutý. Ale když se pokoušíte přihlásit z widgetu na nezabezpečené stránce s FORCE_SSL_ADMIN, nemohu dostat odpověď ze serveru.

Existují nějaké existující pluginy, které tento problém řeší? A pokud ne, někdo má nějaká řešení? Možná, že má zabezpečený formulář vložený do iframe je můj nejlepší nápad zatím ... jen si myslím, že musí existovat jednodušší způsob.

* Úpravy: nabídka odměny *

Přidávám k této otázce odměnu, protože jsem stále zvědavý. Pracoval jsem na tom v mém projektu tím, že jsem se vzdal widgetu a zobrazil odkaz na wp-login stránku. Ale být schopen vložit bezpečný přihlašovací formulář na nezabezpečenou stránku by bylo mnohem lepším řešením. Já udělím odměnu každému, kdo může ukázat kód, který by fungoval, aby se to stalo, nebo mě upozorněte na plugin, který to už dělá.

6
goldenapples

WordPress dieffrence pro hhtp a https a když voláte AJAX s výchozími funkcemi WP než je AJAX regsitration formulář možný. Možná, že vidíte formulář plugin z tohoto návodu: http://www.wpajax.com/code/ Myslím, že je to řešení pro vás.

2
bueltge

Měl jsem podobný problém a ukázalo se, že vše závisí na tom, jak byla funkce wp_signon( $credentials, $secure_cookie ) nazvána.

Chci, aby bylo vše, co je na mých stránkách, https po přihlášení, takže nezabezpečený soubor cookie nemá žádný význam.

V mém kódu z před ssl bylo: wp_signon ($ credentials, false)

tak jsem změnila:

wp_signon( $credentials, false )

na

wp_signon( $credentials, true )

Což vytváří bezpečný soubor cookie a teď je vše v pořádku.

Umím si představit, že vývojáři pluginů se snaží spoléhat na FORCE_SSL_ADMIN pro nastavení zabezpečeného cookie, zkuste ve vašem případě použít wp_signon( $credentials, false ). Doufám, že tento problém vyřeší.

2
Tobias Beuving

Existují způsoby, jak to udělat; tímto způsobem , například. Můj odhad je, že přihlášení s Ajax nepoužívá všechny techniky popsané v tomto článku, a některé funkce zabezpečení prohlížeče je blokují. Zkuste se dostat do kontaktu s vývojářem a navrhnout zlepšení, s ukazatelem na tento článek.

2
dgw

Nezkoumali jste plugin, ale myslím, že je to tvrdé kódování přihlašovací adresy URL bez požadavku https v žádosti Ajax. Přihlašovací formulář wp funguje ve své verzi bez protokolu https spolu s akcí formuláře, která je nastavena na používání protokolu https, takže opravdu nevidím, proč by Ajax nefungoval.

Pokud změna pluginu není volitelná, můžete zkusit tyto přístupy:

Na háku wp_footer by to byla nějaká jquery goodness. Vyhledejte ID přihlašovacího formuláře a změňte jeho adresu URL, například: $(ID).attr('action', newValue);

(Nejsem 100, že to bude fungovat, i když si nejasně vzpomínám, že jquery kašlání na štítcích formulářů při změně metody nebo akce formuláře.)

Druhý přístup, pokud se adresa URL objeví ve formuláři HTML přihlašovacího formuláře, ale ne v jeho volání Ajax, by bylo spuštění výstupní vyrovnávací paměti v adresáři wp_head a str_replace() adresy URL.

Třetí přístup, je-li skutečná adresa URL ve skriptu js nastavena jako parametr, je přepsat její hodnotu v souboru wp_footer, jako je tomu v případě pluginu auto-thickbox pro adresy URL používané v souboru wp.

Poslední možností, pokud je skript chaotický kód špagety s přihlašovací adresou URL pevně v rámci volání funkcí, je dequeue pomocí wp_dequeue_script(), a enqueue vlastní verzi nahradit. Uvědomte si priority, pokud to uděláte: vaše akce wp_print_scripts by se zřejmě měla objevit po instalaci pluginu.

2
Denis de Bernardy

Měl jsem podobný problém s pluginem AJAX.

Po návrhu na https://stackoverflow.com/questions/6301076/wordpress-single-page-ssl , přidal tento soubor do souboru wp-config.php:

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

Pak jsem donutil konkrétní stránku (s AJAX věc) být pouze https: // (pro to existují pluginy).

1