Hybridauth身份验证失败! Facebook返回了无效的用户ID解决方案

时间:2017-07-22 08:56:24

标签: yii hybridauth

我已经解决了这个问题: 出于某种原因,/ oauth / access_token的响应变为有效的JSON。 parse_str函数正在解析错误的格式。对我来说,更改库/ hybridauth / Hybrid / thirdparty / Facebook / base_facebook.php中的这一行解决了这个问题:

请更改此代码

public function setExtendedAccessToken() {
    $response_params = array();
    parse_str($access_token_response, $response_params);

    if (!isset($response_params['access_token'])) {
      return false;
    }   
}

public function getAccessTokenFromCode($code, $redirect_uri = null) {
    $response_params = array();
    parse_str($access_token_response, $response_params);

    if (!isset($response_params['access_token'])) {
        return false;
    } 
}

更改为:

public function setExtendedAccessToken() {  
    $response_params = json_decode($access_token_response, true);

    // Not a valid JSON format
    if(!isset($response_params['access_token'])) {
        // Try to parse
        $response_params = array();
        parse_str($access_token_response, $response_params);

        if (!isset($response_params['access_token'])) {
            return false;
        }
    }  
}

public function getAccessTokenFromCode($code, $redirect_uri = null) { 
    $response_params = json_decode($access_token_response, true);

    // Not a valid JSON format
    if(!isset($response_params['access_token'])) {
        // Try to parse
        $response_params = array();
        parse_str($access_token_response, $response_params);

        if (!isset($response_params['access_token'])) {
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

此问题的解决方案: 出于某种原因,/ oauth / access_token的响应变为有效的JSON。 parse_str函数正在解析错误的格式。对我来说,更改库/ hybridauth / Hybrid / thirdparty / Facebook / base_facebook.php中的这一行解决了这个问题: 更改代码

/ **    *扩展访问令牌,同时删除可能存在的短期令牌    *已通过客户端流程生成。感谢http_bit_ly_b0Pt0H    *为解决方法。    * /   public function setExtendedAccessToken(){     ...

$response_params = array();
parse_str($access_token_response, $response_params);

if (!isset($response_params['access_token'])) {
  return false;
}

...

}

...

/ **    *检索给定授权码的访问令牌    *(以前由www.facebook.com代表    *特定用户)。授权码发送到graph_facebook_com    *并提供访问令牌生成合法访问令牌    *和生成它的用户都匹配,用户是    *登录Facebook或授予离线访问权限。    *    * @param string $ code授权码。    * @param string $ redirect_uri可选的重定向URI。默认为null    *    * @return mixed为授权代码交换的访问令牌,或    *如果无法生成访问令牌,则为false。    * /   public function getAccessTokenFromCode($ code,$ redirect_uri = null){     ...

$response_params = array();
parse_str($access_token_response, $response_params);

if (!isset($response_params['access_token'])) {
  return false;
}

...

}

/ **    *扩展访问令牌,同时删除可能存在的短期令牌    *已通过客户端流程生成。感谢http_bit.ly_b0Pt0H    *为解决方法。    * /   public function setExtendedAccessToken(){     ...

$response_params = json_decode($access_token_response, true);

// Not a valid JSON format
if(!isset($response_params['access_token']))
{
  // Try to parse
  $response_params = array();
  parse_str($access_token_response, $response_params);

  if (!isset($response_params['access_token'])) {
    return false;
  }
}

...

}

...

/ **    *检索给定授权码的访问令牌    *(以前由www_facebook_com代表    *特定用户)。授权码发送到graph_facebook_com    *并提供访问令牌生成合法访问令牌    *和生成它的用户都匹配,用户是    *登录Facebook或授予离线访问权限。    *    * @param string $ code授权码。    * @param string $ redirect_uri可选的重定向URI。默认为null    *    * @return mixed为授权代码交换的访问令牌,或    *如果无法生成访问令牌,则为false。    * /   public function getAccessTokenFromCode($ code,$ redirect_uri = null){     ...

$response_params = json_decode($access_token_response, true);

// Not a valid JSON format
if(!isset($response_params['access_token']))
{
  // Try to parse
  $response_params = array();
  parse_str($access_token_response, $response_params);

  if (!isset($response_params['access_token'])) {
    return false;
  }
}

...

}