跟 facebook 取 access token 失敗?
login.php:
require_once '/vendor/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'xxx',
'app_secret' => 'xxx',
'default_graph_version' => 'v2.8',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email'];
$loginUrl = $helper->getLoginUrl('https://xxx.xxx.com/fb-sdk/fb-callback.php', $permissions);
echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';
fb-callback.php:
require_once '/vendor/autoload.php';
$fb = new \Facebook\Facebook([
'app_id' => 'xxx',
'app_secret' => 'xxx',
'default_graph_version' => 'v2.8',
]);
// Use one of the helper classes to get a Facebook\Authentication\AccessToken entity.
$helper = $fb->getRedirectLoginHelper();
// $helper = $fb->getJavaScriptHelper();
// $helper = $fb->getCanvasHelper();
// $helper = $fb->getPageTabHelper();
try {
$accessToken = $helper->getAccessToken();
// Get the \Facebook\GraphNodes\GraphUser object for the current user.
// If you provided a 'default_access_token', the '{access-token}' is optional.
$response = $fb->get('/me?fields=id,name,email', $accessToken);
} 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;
}
$me = $response->getGraphUser();
echo 'Logged in as ' . $me->getName();
他是會卡在 $accessToken = $helper->getAccessToken();
就不跑了
沒辦法印出任何東西
而且報錯:
Facebook SDK returned an error: Cross-site request forgery validation failed. Required param "state" missing from persistent data.
他回我的 fb-callback.php 有這兩個key
fb-callback.php?code=***&state=***#_=_
我以為是token,所以我就都試試看取代 $accessToken
但還是不對,說token格式不對
到底哪裡有問題?
我確定登入是可以的
當我進去login.php後按下登入,會到facebook,然後問我同不同意,我按同意後就直接跑到 fb-callback.php 了,但就報錯說沒有token
我是按照這個的:https://github.com/facebook/p...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是这样的:
说下oauth2.0授权流程吧,所有oauth2.0的应用都适用,比如twitter,google,facebook,etc.
$loginUrl = $helper->getLoginUrl('https://xxx.xxx.com/fb-sdk/fb-callback.php', $permissions)
,这里一般需要传入一个state(一般为随机字符串)
state
和code
参数,state需要和第一步做匹配,如果不匹配,证明不是第三方回复的。至此,授权流程结束