簡體   English   中英

Facebook php sdk問題:請確保您的redirect_uri與您在OAuth對話框請求中使用的相同

[英]Facebook php sdk problom: Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request

圖表傳回錯誤:驗證碼錯誤。 請確保您的redirect_uri與您在OAuth對話框請求中使用的相同

我不知道怎么解決

login.php

<?
session_start();
$fb = new Facebook\Facebook([
'app_id' => '$id', // Replace {app-id} with your app id
'app_secret' => '$secret',
'default_graph_version' => 'v2.2', 
]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email']; // Optional permissions
$loginUrl = $helper->getLoginUrl('http://localhost:80/fb_test/fb-
callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!
</a>';
 ?>

fb-callback.php

 <?
session_start();

$fb = new Facebook\Facebook([
'app_id' => '1428245583931211', // Replace {app-id} with your app id
'app_secret' => 'cf045e5b4da0abf920b01447f23b09cd',
'default_graph_version' => 'v2.2',
]);

$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)) {
if ($helper->getError()) {
header('HTTP/1.0 401 Unauthorized');
echo "Error: " . $helper->getError() . "\n";
echo "Error Code: " . $helper->getErrorCode() . "\n";
echo "Error Reason: " . $helper->getErrorReason() . "\n";
echo "Error Description: " . $helper->getErrorDescription() . "\n";
} else {
header('HTTP/1.0 400 Bad Request');
echo 'Bad request';
}
exit;
}

// 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: http:/localhost:80/fb_test/');
?>

這是我的應用程序設置在此處輸入圖像描述

如果未顯式傳遞令牌,則getAccessToken方法將為API調用生成重定向URI參數,以根據當前URL交換令牌的代碼。

因此,如果您沒有處理登錄的觸發(即對getLoginUrl的調用),並且沒有在相同的URL下的同一腳本中處理返回的代碼值,則必須將第一個URL顯式傳遞給getAccessToken ,以便它設置發出API請求時,該值與啟動整個過程時指定的getLoginUrl相同。

try {$accessToken = $helper->getAccessToken('http(s)://whatever/path/login.php');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM