我正在尝试使用带有Laravel 5的Facebook PHP-sdk从Facebook获取用户ID。我对我得到的错误进行了大量搜索,但没有一个答案有帮助。
设置键:
use Facebook\FacebookSession;
FacebookSession::setDefaultApplication('XXX' , 'XXX');
重定向到Facebook:
public function getFacebook()
{
$helper = new FacebookHandler(url('settings/set_facebook'));
return Redirect::to($helper->getLoginUrl());
}
获取信息:
public function setFacebook()
{
try{
$session = new FacebookSession(\Session::get('state'));
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$graphObject = $response->getGraphObject()->asArray();
dd($graphObject);
} catch(Exception $e){
dd(
$e->getMessage(),
$e->getCode(),
$e
);
}
}
Laravel会话代码:
use Facebook\FacebookRedirectLoginHelper;
use Illuminate\Support\Facades\Session;
class FacebookHandler extends FacebookRedirectLoginHelper
{
protected function storeState($state)
{
Session::put('state', $state);
}
protected function loadState()
{
return $this->state = Session::get('state');
}
}
输出:
"Invalid OAuth access token."
190
FacebookAuthorizationException {#215 ▶}
我做错了什么?
答案 0 :(得分:2)
使用Laravel Socialite。它支持facebook,twitter,google +和github。 并且易于使用。
答案 1 :(得分:0)
我通过删除setFacebook()并将getFacebook()更新为此来修复此问题:
$helper = new FacebookHandler(url('settings/get_facebook'));
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $e ) {
dd($e);
} catch( Exception $e ) {
dd($e);
}
if (isset($session))
{
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
dd($user_profile);
} else {
return Redirect::to($helper->getLoginUrl());
}
当然,您需要自定义错误处理。