2012-07-14 35 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