【问题标题】:Hybridauth Authentication failed! Facebook returned an invalid user id SolutionHybridauth 身份验证失败! Facebook 返回了无效的用户 ID 解决方案
【发布时间】:2017-12-28 09:22:08
【问题描述】:

我已经解决了这个问题: 出于某种原因,来自 /oauth/access_token 的响应变成了有效的 JSON。 parse_str 函数解析了错误的格式。对我来说,更改 library/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;
        }
    }
}

【问题讨论】:

  • yii 还是yii2
  • 此代码适用于 Yii 1

标签: yii hybridauth


【解决方案1】:

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

/** * 扩展一个访问令牌,同时删除可能存在的短期令牌 * 已通过客户端流程生成。感谢 http_bit_ly_b0Pt0H * 解决方法。 */ 公共函数 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。默认空 * * @return mix 用于交换授权码的访问令牌,或者 * 如果无法生成访问令牌,则为 false。 */ 公共函数 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 * 解决方法。 */ 公共函数 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。默认空 * * @return mix 用于交换授权码的访问令牌,或者 * 如果无法生成访问令牌,则为 false。 */ 公共函数 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;
  }
}

...

}

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2013-07-05
    • 2017-12-15
    • 2015-03-11
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2014-10-11
    相关资源
    最近更新 更多