Laravel 5从facebook获取用户信息

时间:2015-03-01 13:28:24

标签: php facebook laravel facebook-php-sdk laravel-5

我正在尝试使用带有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 ▶}

我做错了什么?

2 个答案:

答案 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());
}

当然,您需要自定义错误处理。