【问题标题】:Getting invalid oauth access token while trying to retrieve Facebook user profile in Laravel 4尝试在 Laravel 4 中检索 Facebook 用户个人资料时获取无效的 oauth 访问令牌
【发布时间】:2014-10-03 05:48:14
【问题描述】:

我正在尝试检索用户的 Facebook 个人资料。我正在使用 Laravel 4 框架。 Bur 我每次都收到“无效的 oauth 访问令牌”。

我的代码如下。

    <?php
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;

class FacebookController extends BaseController{
    public function __construct(){
        session_start();
        FacebookSession::setDefaultApplication('xx','yy');
    }
    //when the user clicks on the login button he comes to this function
    public function getLogin(){
        $helper = new FacebookRedirectLoginHelper(url('facebook/user'));
        return Redirect::to($helper->getLoginUrl());
    }
    //when the user logs in, he comes to this function
    public function getUser(){ 
        try{
            $session = new FacebookSession(Session::get('_token'));//I believe here lies the problem

            $request = new FacebookRequest($session, 'GET', '/me');
            $response = $request->execute();
            $graphObject = $response->getGraphObject()->asArray();
            dd($graphObject);
        } catch(Exception $e){
            dd($e);
        }

    }
}

【问题讨论】:

    标签: facebook laravel laravel-4 access-token facebook-sdk-4.0


    【解决方案1】:

    请看一下我们在http://valoresdovale.com/login/fb 测试的工作代码:

    <?php
    
    use Facebook\FacebookSession;
    use Facebook\FacebookRedirectLoginHelper;
    use Facebook\FacebookRequest;
    use Facebook\FacebookAuthorizationException;
    use Facebook\FacebookRequestException;
    
    session_start(); //this can be moved to app/public/index.php
    
    Route::get('/', function()
    {
        return View::make('hello');
    });
    
    Route::get('login/fb', function() {
    
    
        FacebookSession::setDefaultApplication('YOUR_ID', 'YOUR_SECRET');
        $helper = new FacebookRedirectLoginHelper('http://yoururl/login/fb/callback');
        $loginUrl = $helper->getLoginUrl();
        return "<a href='$loginUrl'>facebook</a>";
    });
    
    Route::get('login/fb/callback', function() {
    // A FacebookResponse is returned from an executed FacebookRequest
        $helper = new FacebookRedirectLoginHelper('http://yoururl/login/fb/callback');
        $session = $helper->getSessionFromRedirect();
        $request = new FacebookRequest($session, 'GET', '/me');
        try {
            $response = $request->execute();
            $me = $response->getGraphObject();
        } catch (FacebookRequestException $ex) {
            echo $ex->getMessage();
        } catch (\Exception $ex) {
            echo $ex->getMessage();
        }
    
        print_r($me);//->getProperty("id"));
        $user = new Giftee;
        $user->name = $me->getProperty('first_name') . ' ' . $me->getProperty('last_name');
        $user->email    = $me->getProperty('email') . "@facebook.com.br";
        $user->photo    = 'https://graph.facebook.com/' . $me->getProperty('id') . '/picture?type=large';
    
        $user->save();
    
    });
    

    这是基于 http://maxoffsky.com/code-blog/integrating-facebook-login-into-laravel-application/ 并由 Denisson Leal 更新到新的 Facebook SDK。

    【讨论】:

      【解决方案2】:

      你不需要session_start(),laravel 会为你处理所有的会话管理。

      这看起来不像是 laravel 特有的问题,而是你代码中的一个简单错误:

      facebook 文档页面上的示例使用FacebookRedirectLoginHelper::getSessionFromRedirect() 检索用于处理请求的会话。

      $helper = new FacebookRedirectLoginHelper();
      
      try {
          $session = $helper->getSessionFromRedirect();
      
          // your old code
      }
      

      Source

      【讨论】:

      • 它给了我 FacebookRedirectLoginHelper 缺少参数 1 的错误
      • [github.com/facebook/facebook-php-sdk-v4/blob/master/src/… 和构造函数都不需要参数。此外,错误消息听起来很奇怪,因为FacebookRedirectLoginHelper 是一个类,而不是一个函数。
      • 感谢您的帮助。顺便说一句,构造函数需要一个参数。
      猜你喜欢
      • 2016-10-19
      • 2021-01-04
      • 2015-05-03
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多