[当我尝试使用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);
}
}
我也遇到了同样的问题。事实证明,我的问题是我的return_uri缺少结尾斜杠,该斜杠贯穿了整个过程。确保在调用时已添加它。
$fb = OAuth::consumer('Facebook','http://url.to.redirect.to/');
NOT
$fb = OAuth::consumer('Facebook','http://url.to.redirect.to');
首先尝试加载file_get_contents(“ https://www.facebook.com”);
如果在php.ini中设置了allow_url_fopen = 0,它将无法正常工作,因此您需要将其更改为allow_url_fopen = 1
最奇怪的是我遇到了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 );
}
}
由于我先前的答案已删除。。让我们再试一次。。
-
经过一些调试,我想我明白了。注释掉代码段中可见的error_reporting部分,已经可以告诉您很多东西。由于令牌不再有效,因此file_get_contents调用获得了401未经授权。
更改代码后,请从头开始进行身份验证过程,不要半途刷新您的网址,否则会导致错误。
问题应该在这里$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
与我配合正常。
我有同样的问题。我正在尝试访问Facebook图形。不是因为它无法访问URL,而是因为我没有传递参数,Facebook返回了400错误。尝试在将具有有效HTTPS连接的站点上连接到HTTPS。例如。试试这个:
file_get_contents("https://www.namhost.com");
如果可行,您必须查看您连接到的HTTP连接失败的原因,因为问题不在于您无法连接到HTTP,而在于您连接的对象不喜欢该请求。