<?php
session_start();
//included file and use
$app_id = 'xxx';
$app_secret = 'xxx';
FacebookSession::setDefaultApplication($app_id, $app_secret);
$helper = new FacebookRedirectLoginHelper("`http://example/facebook4.0`/", $app_id, $app_secret);
try
{
$session = $helper->getSessionFromRedirect();
}
catch(FacebookRequestException $ex) { }
catch(Exception $ex) { }
$loggedIn = false;
if (isset($session))
{
if ($session)
{
$loggedIn = true;
try { //logged here and get data
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
print_r($user_profile); //print data
}
catch(FacebookRequestException $e) {
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
}
if(!$loggedIn) //if user is not online // get link and add scope
{
$loginUrl = $helper->getLoginUrl(array('public_profile','email'));
echo "<a href='$loginUrl'>Login With Facebook</a>";
}
else
{
print_r($user_profile); //logout link is generated here
echo '<br><br><a href="index.php">Logout</a>'; //print to sceen
}
?>
我已将域名设置为localhost,将站点URL设置为http://localhost/
。
我还尝试了http://localhost:80
,http://mydomainname:80
(更改主机)
这是我得到回应的错误:
Facebook\FacebookSDKException Object
(
[message:protected] => Failed to connect to graph.facebook.com port 443: Network unreachable
[string:Exception:private] =>
[code:protected] => 7
[file:protected] => C:\xampp\htdocs\myapp\Facebook\HttpClients\FacebookCurlHttpClient.php
[line:protected] => 142
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => C:\xampp\htdocs\myapp\Facebook\FacebookRequest.php
[line] => 248
[function] => send
[class] => Facebook\HttpClients\FacebookCurlHttpClient
[type] => ->
[args] => Array
(
[0] => https://graph.facebook.com/v2.0/oauth/access_token?client_id='my key'&redirect_uri=http%3A%2F%2Flocalhost%3A80%2Fmyapp%2F&client_secret='mykey_secert'&code=AQCYmzsFNUIQG7gUAZ3y-YJHLeIGcF-xyqHotx31MCJGlm16fV9VbVSzlGlx5280-u0Ho3jFjg_REevN5J0LEIPHerY1QaaBYjpkkoIMf6PCwHGj2OIrQDvfyGcUJRK4cJP0YQ8H8HdYw86xEhlcdJHvnObkCU6tSBcVbDWM8uoXJlRqNl6o-IdxoSfbk6IjuCreyagMXvam4vgV0HKxn0nkWaV26k1P6kQP_L1LtXXx2UyUQ1i0jJGL9JiGr1gsUbf5drY_URIrEWzawumpnSWkuxln8hiOtAr_xwM_4cBZwxf3_pWq8YnUotpmzzM5sPhW_ERMYWAdovjZPHu7Xdgs&access_token=329734847193179%7Cd9e5cdb2d0c3cbe1e127827762e94284&appsecret_proof='key_proof'
[1] => GET
[2] => Array
(
)
)
)
[1] => Array
(
[file] => C:\xampp\htdocs\myapp\Facebook\FacebookRedirectLoginHelper.php
[line] => 146
[function] => execute
[class] => Facebook\FacebookRequest
[type] => ->
[args] => Array
(
)
)
[2] => Array
(
[file] => C:\xampp\htdocs\myapp\index.php
[line] => 52
[function] => getSessionFromRedirect
[class] => Facebook\FacebookRedirectLoginHelper
[type] => ->
[args] => Array
(
)
)
)
[previous:Exception:private] =>
)
答案 0 :(得分:2)
我知道这是一个老问题,OP可能已经找到了解决方案。在使用Laravel Socialite插件时,我也遇到了同样的问题。
对于后人,我想在这里发布解决方案。此问题在question中解释:域graph.facebook.com解析为IPV6地址,某些网络可能未配置为路由。您可以请求cURL将IP地址解析为其IPV4值。将选项CURLOPT_IPRESOLVE
设置为CURL_IPRESOLVE_V4
。
对于社交网站插件,我们必须修改FacebookProvider.php
以包含其他选项。
修改强>
更具体地说,Socialite使用GuzzleHttp,我们需要将此作为参数传递给GuzzleHttp客户端方法:
'curl' => [ CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4]