Laravel 5 从 facebook 获取用户信息

Laravel 5 get user info from facebook

我正在尝试使用 Facebook PHP-sdk 和 Laravel 5 从 Facebook 获取用户 ID。我对遇到的错误进行了大量搜索,但 none 的答案有所帮助。

设置键:

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 ▶}

我做错了什么?

使用Laravel Socialite。它支持 facebook、twitter、google+ 和 github。 而且也很容易使用。

我通过删除 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());
}

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