带有Laravel 4.1和oauth-4-laravel的Facebook TokenResponseException

问题描述 投票:3回答:6

[当我尝试使用oauth-4-laravel使用Facebook登录到我的网站时,我从Laravel获得了TokenResponseException。

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

使用Facebook的JavaScript API可以像预期的那样工作,所以我很确定我的应用程序配置正确。

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

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

这里是代码:

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
6个回答
1
投票

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

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

NOT

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

1
投票

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

如果在php.ini中设置了allow_url_fopen = 0,它将无法正常工作,因此您需要将其更改为allow_url_fopen = 1


0
投票

最奇怪的是我遇到了Google问题,而不是Facebook问题,所以这是我的代码maby,它可以帮助您解决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 );            
    }

}

0
投票

由于我先前的答案已删除。。让我们再试一次。。

-

经过一些调试,我想我明白了。注释掉代码段中可见的error_reporting部分,已经可以告诉您很多东西。由于令牌不再有效,因此file_get_contents调用获得了401未经授权。

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


0
投票

问题应该在这里$token = $fb->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与我配合正常。


0
投票

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

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

如果可行,您必须查看您连接到的HTTP连接失败的原因,因为问题不在于您无法连接到HTTP,而在于您连接的对象不喜欢该请求。

© www.soinside.com 2019 - 2024. All rights reserved.