2015-03-01 4 views
1

Я пытаюсь получить идентификатор пользователя из Facebook с помощью PHP-sdk Facebook с Laravel 5. Я много искал ошибки, которые я получил, но ни один из ответов не помог.Laravel 5 получить информацию о пользователе от facebook

Набор ключей:

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

использование Laravel Socialite. Он поддерживает facebook, твиттер, google + и github. и также проста в использовании.

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

Конечно, вы должны настроить обработку ошибок.