2017-07-22 86 views
0

我已解决此问题:由于某种原因, /oauth/access_token的响应成为有效的JSON。 parse_str函数解析错误的格式。对我来说,在库/ hybridauth /混合/第三方/ Facebook的/ base_facebook.php更改此行解决了这个问题:Hybridauth身份验证失败! Facebook返回了一个无效的用户ID解决方案

请更改此代码

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; 
     } 
    } 
} 
+0

它[标签:警予]或[标签:yii2]? – SaidbakR

+1

这个代码为Yii 1 –

回答

0

此问题的解决方案: 由于某种原因,来自/ oauth/access_token的响应成为有效的JSON。 parse_str函数解析错误的格式。对我来说,在库/ hybridauth /混合/第三方/ 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授权码。 * @参数字符串$ redirect_uri可选的重定向URI。默认为空 * * @return mixed如果无法生成访问令牌,则为授权代码交换访问令牌* *为false。 */ 公共职能getAccessTokenFromCode($代码,$ 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授权码。 * @参数字符串$ redirect_uri可选的重定向URI。默认为空 * * @return mixed如果无法生成访问令牌,则为授权代码交换访问令牌* *为false。 */ 公共职能getAccessTokenFromCode($代码,$ 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; 
    } 
} 

... 

}