我已經看到噸如何做到這一點的帖子,但沒有任何我已經嘗試似乎對我的情況工作。我期待着它的發展而瘋狂。使用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 &密碼=密碼
但是上捲曲的請求似乎沒有任何保存。任何人都可以想出一些方法來幫助我朝正確的方向發展。我很親密!
謝謝!
您是否可以控制兩個域? – 2012-07-14 07:44:44
是的,我願意。他們都是我的網站。 – Pengume 2012-07-14 08:06:36
我已經厭倦了類似的方法,因爲這個答案http://stackoverflow.com/a/1486474/839628但我想我錯過了這個工作的難題。我不明白爲什麼它不應該,因爲腳本登錄是在我想登錄的網站上運行.. – Pengume 2012-07-14 08:10:50