2016-03-23 55 views
10

試圖與Facebook憑據登錄時,我收到以下錯誤消息登錄嘗試的過程中的Facebook SDK錯誤:沒有URL設置

Facebook SDK returned an error: No URL set!

Fatal error: Uncaught exception 'Facebook\Exceptions\FacebookSDKException' with message 'No URL set!' in /membri/csslab/sdk/src/Facebook/HttpClients/FacebookCurlHttpClient.php:83

Stack trace:

0 /membri/csslab/sdk/src/Facebook/FacebookClient.php(216): Facebook\HttpClients\FacebookCurlHttpClient->send(' https://graph.f ...', 'GET', '', Array, 60)

1 /membri/csslab/sdk/src/Facebook/Authentication/OAuth2Client.php(277): Facebook\FacebookClient->sendRequest(Object(Facebook\FacebookRequest))

2 /membri/csslab/sdk/src/Facebook/Authentication/OAuth2Client.php(226): Facebook\Authentication\OAuth2Client->sendRequestWithClientParams('/oauth/access_t...', Array)

3 /membri/csslab/sdk/src/Facebook/Authentication/OAuth2Client.php(166): Facebook\Authentication\OAuth2Client->requestAnAccessToken(Array)

4 /membri/csslab/sdk/src/Facebook/Helpers/FacebookRedirectLoginHelper.php(255): Facebook\Authentication\OAuth2Client->getAccessTokenFromCode('AQAAf_xMnFr0C7i...', ' http://csslab.a ...')

5 /membri/csslab/login-callback.php(30): Facebook\Hel in /membri/csslab/sdk/src/Facebook/HttpClients/FacebookCurlHttpClient.php on line 83

一切工作正常在本地。我已經在Facebook應用中正確設置了域名。

我正在使用的代碼是由Facebook的文件建議:

<?php // login-callback.php 
session_start(); 

function redirect($url, $permanent = false) { 
    if (headers_sent() === false) { 
     header('Location: ' . $url, true, ($permanent === true) ? 301 : 302); 
    } 
    exit(); 
} 

$path = ''; 
$uri = 'http://xxxxx.altervista.org'; 
require_once $path . 'sdk/src/Facebook/autoload.php'; 

$fb = new Facebook\Facebook([ 
    'app_id' => 'xxxxxxxxxxx', 
    'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxx', 
    'default_graph_version' => 'v2.5', 
    ]); 

$helper = $fb->getRedirectLoginHelper(); 

try { 

    $accessToken = $helper->getAccessToken(); 

} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

if (isset($accessToken)) { 
    // Logged in! 
    $_SESSION['facebook_access_token'] = (string) $accessToken; 

    // Now you can redirect to another page and use the 
    // access token from $_SESSION['facebook_access_token'] 
    redirect($uri . 'survey.php?token='.$_SESSION['facebook_access_token'] , false); 
} elseif ($helper->getError()) { 
    // There was an error (user probably rejected the request) 
    echo '<p>Error: ' . $helper->getError(); 
    echo '<p>Code: ' . $helper->getErrorCode(); 
    echo '<p>Reason: ' . $helper->getErrorReason(); 
    echo '<p>Description: ' . $helper->getErrorDescription(); 
    exit; 
} 
?> 

UPDATE:

public function send($url, $method, $body, array $headers, $timeOut) 
{ 
$this->openConnection($url, $method, $body, $headers, $timeOut); 
$this->sendRequest(); 

if ($curlErrorCode = $this->facebookCurl->errno()) { 
    throw new FacebookSDKException($this->facebookCurl->error(), $curlErrorCode); 
} 

// Separate the raw headers from the raw body 
list($rawHeaders, $rawBody) = $this->extractResponseHeadersAndBody(); 

$this->closeConnection(); 

return new GraphRawResponse($rawHeaders, $rawBody); 
} 
+0

檢查'domain'在'Facebook的App'的訪問令牌代碼。你需要添加你使用的域名。 – Yash

+0

謝謝@Yash!就我而言,域名是http://xxxx.altervista.org,對嗎? – stochazesthai

+0

對,你必須添加域名。 – Yash

回答

0

其重定向回調URL的問題。確保您的回調網址是正確設置在生成登錄URL

$permissions = ['email']; // Optional permissions 
$loginUrl = $helper->getLoginUrl('http://xxxxx.altervista.org/login-callback.php',$permissions); 
+0

回調網址設置正確。事實上,我可以登錄...當詢問訪問令牌時出現問題 – stochazesthai

0

的OAuth幫助管理您必須驗證他們

// Logged in 
echo '<h3>Access Token</h3>'; 
var_dump($accessToken->getValue()); 

// The OAuth 2.0 client handler helps us manage access tokens 
$oAuth2Client = $fb->getOAuth2Client(); 

// Get the access token metadata from /debug_token 
$tokenMetadata = $oAuth2Client->debugToken($accessToken); 
echo '<h3>Metadata</h3>'; 
var_dump($tokenMetadata); 

// Validation (these will throw FacebookSDKException's when they fail) 
$tokenMetadata->validateAppId({app-id}); // Replace {app-id} with your app id 
// If you know the user ID this access token belongs to, you can validate it here 
//$tokenMetadata->validateUserId('123'); 
$tokenMetadata->validateExpiration(); 

if (! $accessToken->isLongLived()) { 
    // Exchanges a short-lived access token for a long-lived one 
    try { 
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 
    } catch (Facebook\Exceptions\FacebookSDKException $e) { 
    echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; 
    exit; 
    } 

    echo '<h3>Long-lived</h3>'; 
    var_dump($accessToken->getValue()); 
} 

$_SESSION['fb_access_token'] = (string) $accessToken; 

// User is logged in with a long-lived access token. 
// You can redirect them to a members-only page. 
//header('Location: https://example.com/members.php'); 
+0

我得到一個錯誤: 致命錯誤:調用成員函數getValue()在/ membri/csslab /第50行的login-callback.php – stochazesthai

+0

$ accessToken = $ helper-> getAccessToken(); – Ankanna

+0

是的,但這恰恰是引發錯誤的代碼行...... – stochazesthai