2012-07-14 34 views
1

我已經看到噸如何做到這一點的帖子,但沒有任何我已經嘗試似乎對我的情況工作。我期待着它的發展而瘋狂。使用POST數據登錄wordpress

我想從一個不同的網址登錄到一個WordPress的網站A,所以當用戶登錄到WordPress的網站B他們會自動登錄到WordPress的網站A.注意:這些網站是在同一臺服務器只是不同的網址。

我已經試過CURL並且已經正常工作(發送和接收數據),但它看起來並不像Cookie被正確存儲,並且從未登錄過我的網站。我的密碼我剛剛擺脫它做安全在這裏在這裏更詳細所以它張貼

是哪個我是從(站點B)

add_filter('wp_authenticate', 'send_login', 100, 3); 
function send_login($username, $password) { 
    // this filter is called on the log in page 
    // make sure we have a username before we move forward 
    if (!empty($username)) { 

    //send login information to other sites 
    $fields = array('username' => $username , 'password' => $password); 
    echo "<br /> pwd: ". $fields['password']; 
    $response = do_post_request('http://www.wordpressSiteA.com/wp-content/plugins/login-api/login.php' , $fields); 
    echo $response; 
    exit; // i have this for testing purposes so i dont have to keep logging in and out to test 
    return $user; 
    } 
    return $user; 
} 



function send_data_to_sister_sites($url , $fields) { 
//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.urlencode($value).'&'; } 
rtrim($fields_string,'&'); 
$cookie = "cookie.txt"; 
//open connection 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt($ch, CURL_COOKIEFILE, ''); 
//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

//execute post 
$result = curl_exec($ch); 




//close connection 
curl_close($ch); 

return $result; 
} 

然後發送捲曲的代碼這裏是網站A的login.php文件我發送捲曲太登錄我也經常遇到這種腳本從站點A這樣稱它的用戶

require_once("../../../wp-blog-header.php"); 
//check security of this request and check fields are sent properly 
if (isset ($_REQUEST['username']) && isset($_REQUEST['password'])) { 
    $username = $_REQUEST['username']; 
    $userinfo = get_user_by('login', $username); 
    if ($userinfo) { 


     //parse data and decrypt fields 
     $password = $_REQUEST['password']; 

     $creds = array(); 
     $creds['user_login'] = $username; 
     $creds['user_password'] = $password; 
     $creds['remember'] = false; 
     //log in user 

     wp_signon($creds, true); 
     wp_set_auth_cookie($userinfo->ID); 
     wp_set_current_user($userinfo->ID); 

    // global $current_user; 
     //get_currentuserinfo(); 
    // echo 'name: ' . $current_user->user_login . '<br />'; 
     if (is_wp_error($user)) 
      echo $user->get_error_message(); 
     echo "Success"; 
    } else { 
     //no user found exit false 
     echo "no user found"; 
    } 
} else { echo "no paramters exist"; } 

並能正常工作,用戶獲取登錄。

www.wordpressSiteA.com/wp-content/plugins/login-api/login.php?username=username &密碼=密碼

但是上捲曲的請求似乎沒有任何保存。任何人都可以想出一些方法來幫助我朝正確的方向發展。我很親密!

謝謝!

+0

您是否可以控制兩個域? – 2012-07-14 07:44:44

+0

是的,我願意。他們都是我的網站。 – Pengume 2012-07-14 08:06:36

+0

我已經厭倦了類似的方法,因爲這個答案http://stackoverflow.com/a/1486474/839628但我想我錯過了這個工作的難題。我不明白爲什麼它不應該,因爲腳本登錄是在我想登錄的網站上運行.. – Pengume 2012-07-14 08:10:50

回答

0

由於它們位於同一臺服務器上,因此可以在兩個站點之間共享會話,但不能通過讀取cookie。例如,你可以在兩個站點上存儲會話ID,IP和上次訪問數據庫的時間,並在兩個數據庫中讀取數據庫表,如果在相同的IP並且在短期內訪問並且沒有註銷,則根據該會話創建新的會話id並登錄用戶。這可能會導致一些安全問題,但可以完成。

另請參閱:Session Share Across Multiple Domains On Same Server

+0

我想最讓我感到困惑的部分是爲什麼當login.php腳本正在我想登錄的實際站點上執行時,這將無法正常工作。我不明白爲什麼不能工作...我需要操縱標題才能正常工作?我可能只會寫入數據庫而不是檢查它。 – Pengume 2012-07-14 07:29:40

+0

,因爲當你創建一個會話時,它需要設置一個cookie來存儲會話ID。並且由於您使用域A進行連接併發布到域B.域B將嘗試設置cookie,但Cookie不會在用戶計算機上設置,而是在您的服務器上進行卷曲,因此無論如何都會忽略該Cookie。最終用戶不會收到cookie,當他/她訪問域B時,沒有cookie可以告訴網站會話ID。 – 2012-07-14 13:47:52

+0

非常感謝您的解釋。現在有道理。 – Pengume 2012-07-14 21:48:28

0

與其他網絡應用程序一樣使用文字按會話進行登錄。而且在使用不同域名時會話中存在問題,他們不會被髮送到任何其他站點,甚至任何其他子域,更不用說另一個域名。所以請嘗試發送您的會話!

+0

是啊,謝謝。我認爲這與交叉域名或某事有關。我一直在嘗試很多東西,我會繼續嘗試。謝謝 – Pengume 2012-07-14 05:20:28

+0

惠康!!!!!!! – Abadis 2012-07-14 05:29:36