2012-10-30 89 views
3

我有一個正在使用Zend Framework開發的網站。我也有一個WordPress的網站放在同一臺服務器上。當我登錄到我的Zend站點時,是否可以使用任何(e:g AJAX調用)登錄Wordpress站點。從我的網站登錄到WordPress的網站

原因:

我對Zend的網站的鏈接文字新聞的博客,當我是點擊鏈接,就帶我到WordPress的登錄頁面。

我希望用戶被帶到word按博客頁面鏈接作爲登錄用戶。

我在這方面做了很多研究,但沒有找到正確的路徑。

謝謝。

+0

你怎麼想認其WP用戶需要登錄?基於您的Zend網站登錄憑據? –

+0

用戶在wordpress和Zend站點中擁有相同的憑據。 –

+0

你的意思是說,進入WP頁面**的用戶應該擁有一個擁有相同登錄名/密碼的WP賬戶? wp_users表中已經有記錄了? –

回答

0

禁止在2個不同域名之間使用AJAX,您可以在PHP中使用Curl函數。 http://bit.ly/RBGgfp

0

對您的問題存在安全隱患。如何將憑據從一個網站傳遞到另一個網站而不實際通過他們...

您需要某種授權過程,它會告訴WP,正在登錄到WP的用戶實際上是已經登錄到的用戶Zend公司。爲此,您不能在從ZF到WP的Ajax調用中傳遞用戶名和密碼,因爲每個人都可以從緩存的JS源代碼中獲取用戶的密碼。 此外,你不能只傳遞用戶名在Ajax調用,因爲然後每個人都可以做這樣的ajax調用登錄爲別人。

一般而言,您應儘可能限制通過客戶端請求(Ajax)的授權。

這樣做的一種方式是許多稱爲OAuth的社交網絡(即Facebook)使用的機制。 Facebook使用特殊令牌進行授權,並且在Facebook和使用Facebook連接機制的網站之間不傳遞憑證。此外,Facebook使用PHP的curl函數在幕後進行跨服務器調用,因此客戶端沒有留下關於授權過程的痕跡。

你可以但你不必使用OAuth,但如果你這樣做,它會是一個很好的經驗收益。

您面臨的另一個問題是,您的ZF和WP可能在客戶端使用不同的授權cookie。因此,當在ZF網站上授權用戶時,您還需要對負責登錄的WP頁面進行Ajax調用,以確保設置了正確的cookie。

的蘇瑪summarum流程將與此類似(假設已在兩個站點創建用戶帳戶):在ZF網站

  1. 登錄用戶。
  2. 從ZF將包含用戶標識(例如)的curl調用轉換爲WP頁面,該頁面將返回某種隨機生成的標記(如果具有給定標識的用戶存在)。
  3. 一旦你的curl調用接收到來自WP的令牌,生成帶有JS的ZF網頁,它使得Ajax調用WP(如何發送Ajax調用WP到這裏:http://codex.wordpress.org/AJAX_in_Plugins) 這個Ajax調用應該包含類似md5哈希用戶ID和令牌。
  4. 現在在WP端,WP將收到帶有散列值的ZF Ajax調用。因此,請檢查此值是否與散列用戶標識和WP之前返回的標記之後的值相同(在步驟2中)。如果是,則在WP站點上登錄用戶。

現在,因爲我們不會將用戶密碼從ZF發送到WP(並且我們不知道WP端 - 因爲它是加密的),您不能使用wp_signon登錄用戶。但是你可以使用wp_set_auth_cookie來滿足這個特定的目的。

這是一個粗略的解釋,但我希望它會有所幫助。

P.S. wp_login已被棄用,您應該避免使用它。

而且wp_login動作不叫wp_set_auth_cookie它可以作爲爲什麼登錄的第一個地方你的用戶沒有出現的理由。

嘗試用它wp_set_auth_cookie您的解決方案。我在最後說這個,所以你不要錯過上面的安全問題。

0

由於這兩個網站在同一臺服務器上,推測你可以訪問文件形成既Zend和WordPress的。當用戶登錄到基於Zend的站點時,可以添加一個調用來加載基本的wordpress文件,然後使用函數wp_set_auth_cookie()將用戶登錄到wordpress中。

require_once 'wordpress-directory/wp-load.php'; 
wp_set_auth_cookie($wp_user_id); 

在你的Zend的網站用戶表,你可以有一個附加列wp_user_id存儲WordPress的用戶ID爲您的用戶,讓你知道什麼是用戶ID傳遞wp_set_auth_cookie()功能。

我寫了在多一點籠統一篇博客文章,如果你想看看還有here