2016-03-23 12 views
10

sto ottenendo il seguente messaggio di erroreerrore Facebook SDK durante tentativo di accesso: Nessun URL impostato

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

quando si cerca di effettuare il login con le credenziali di Facebook.

Tutto funziona bene in locale. Ho impostato correttamente il dominio nell'app Facebook.

Il codice che sto utilizzando è quella suggerita da documentazione di 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

controllo del 'domain' in' facebook app' . è necessario aggiungere il dominio a ciò che si sta utilizzando. – Yash

+0

Grazie a @Yash! Nel mio caso, il dominio è http://xxxx.altervista.org, giusto? – stochazesthai

+0

right, devi aggiungere il nome del dominio. – Yash

risposta

0

E 'un problema di URL di reindirizzamento di callback. Assicurati che il tuo URL di callback è configurato correttamente nel codice che genera l'URL di accesso

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

L'url di richiamata è impostato correttamente. Effettivamente posso accedere ... il problema arriva quando chiedi il token di accesso – stochazesthai

0

OAuth aiuta a gestire i token di accesso si deve convalidarli

// 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

Viene visualizzato un errore: Errore irreversibile: chiamata a una funzione membro getValue() su un oggetto non in/membri/csslab/login-callback.php sulla linea 50 – stochazesthai

+0

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

+0

sì, ma è proprio la linea di codice che solleva gli errori ... – stochazesthai