【问题标题】:Facebook TokenResponseException with Laravel 4.1 and oauth-4-laravelFacebook TokenResponseException 与 Laravel 4.1 和 oauth-4-laravel
【发布时间】:2014-03-10 08:38:02
【问题描述】:

当我尝试使用 oauth-4-laravel 通过 Facebook 登录我的网站时,我从 Laravel 收到 TokenResponseException。

OAuth \ Common \ Http \ Exception \ TokenResponseException
Failed to request resource.

使用 Facebook 的 JavaScript API 可以正常工作,所以我很确定我的应用程序配置正确。

是否有任何已知问题可能导致此问题?是我做错了什么,还是库中的错误?

除了 works around another bug 的重定向行之外,我的代码与 GitHub 页面上的示例代码相同。我认为当我尝试从 Facebook 服务对象获取令牌时会引发异常。

代码如下:

public function loginWithFacebook() {
    // get data from input
    $code = Input::get( 'code' );

    // get fb service
    $fb = OAuth::consumer( 'Facebook' );

    // check if code is valid

    // if code is provided get user data and sign in
    if ( !empty( $code ) ) {
        // This was a callback request from google, get the token
        $token = $fb->requestAccessToken( $code );

        // Send a request with it
        $result = json_decode( $fb->request( '/me' ), true );

        $message = 'Your unique facebook user id is: ' . $result['id'] . ' and your name is ' . $result['name'];
        echo $message. "<br/>";

        //Var_dump
        //display whole array().
        dd($result);

    }
    // if not ask for permission first
    else {
        // get fb authorization
        $url = $fb->getAuthorizationUri();

        // return to facebook login url
        // ref: https://github.com/artdarek/oauth-4-laravel/issues/27
        //return Response::make()->header( 'Location', (string)$url );
        return Redirect::to((string)$url);
    }

}

还有一个screenshot

【问题讨论】:

    标签: php facebook oauth laravel laravel-4


    【解决方案1】:

    最奇怪的事情是我在 google 上遇到了你的问题而不是在 facebook 上,所以这是我的代码,它可以帮助你解决你的 fb 问题

    public function loginWithFacebook() {
    
        // get data from input
        $code = Input::get( 'code' );
    
        // get fb service
        $fb = OAuth::consumer( 'Facebook' );
    
    
    
        // check if code is valid
    
        // if code is provided get user data and sign in
        if ( !empty( $code ) ) {
    
            // This was a callback request from facebook, get the token
            $token = $fb->requestAccessToken( $code );
    
            // Send a request with it
            $result = json_decode( $fb->request( '/me' ), true );
    
            $message = 'Your unique facebook user id is: ' . $result['id'] . ' and your name is ' . $result['name'];
            echo $message. "<br/>";
    
            //Var_dump
            //display whole array().
            dd($result);
    
        }
        // if not ask for permission first
        else {
    
    
            // get fb authorization
            $url = $fb->getAuthorizationUri();
    
            // return to facebook login url
            return Redirect::to( (string)$url );            
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      由于我之前的回答被删除了..让我们再试一次..

      --

      经过一些调试,我想我明白了。注释掉代码 sn-p 中可见的 error_reporting 部分已经告诉了您很多信息。 file_get_contents 调用得到 401 Unauthorized,因为令牌不再有效。

      更改代码后,从头开始您的身份验证过程,不要中途刷新您的网址,否则会导致错误。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。事实证明,我的问题是我的 return_uri 缺少一个斜杠,这贯穿了整个过程。确保在调用它时已添加它。

        $fb = OAuth::consumer('Facebook','http://url.to.redirect.to/');
        

        不是

        $fb = OAuth::consumer('Facebook','http://url.to.redirect.to');
        

        【讨论】:

          【解决方案4】:

          问题应该出在这里$token = $fb-&gt;requestAccessToken( $code );

          当我尝试 var_dump 时,我明白了。

          object(OAuth\OAuth2\Token\StdOAuth2Token)[279]
          protected 'accessToken' => string 'your-accessToken' (length=180)
          protected 'refreshToken' => null
          protected 'endOfLife' => int 1404625939
          protected 'extraParams' => 
               array (size=0)
            empty
          

          试试这个,看看你得到了什么accessToken。无论如何,你的函数 loginWithFacebook 对我来说很好。

          【讨论】:

            【解决方案5】:

            我遇到了同样的问题。我试图访问 facebook 图表。不是它无法访问 URL,而是 Facebook 返回 400 错误,因为我没有传递参数。尝试在具有有效 HTTPS 连接的站点上连接到 HTTPS。例如。试试这个:

            file_get_contents("https://www.namhost.com");
            

            如果可行,您必须了解您正在连接的 HTTPs 连接失败的原因,因为问题不在于您无法连接到 HTTPs,而是您正在连接的内容不喜欢该请求.

            【讨论】:

              【解决方案6】:

              首先尝试加载file_get_contents("https://www.facebook.com");

              如果在 php.ini 中设置了 allow_url_fopen=0,它将不起作用,因此您需要将其更改为 allow_url_fopen=1

              【讨论】:

              • 不错!为我节省了很多调试时间
              猜你喜欢
              • 1970-01-01
              • 2014-10-17
              • 2016-04-07
              • 2014-04-10
              • 2014-11-02
              • 2014-07-16
              • 1970-01-01
              • 1970-01-01
              • 2018-05-29
              相关资源
              最近更新 更多