2017-07-22 9 views
0

J'ai résolu ce problème: pour une raison quelconque, la réponse de/oauth/access_token est devenue un JSON valide. La fonction parse_str analysait un mauvais format. Pour moi, changer ces lignes dans les bibliothèques/hybridauth/Hybrid/thirdparty/Facebook/base_facebook.php résolu le problème:L'authentification Hybridauth a échoué! Facebook a retourné un identifiant d'utilisateur invalide Solution

S'il vous plaît changer ce code

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

Modification:

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

-t-il [tag: yu] ou [tag: yii2]? – SaidbakR

+1

Ce code pour Yii 1 –

Répondre

0

Solution pour cette question: pour une raison quelconque, la réponse de/oauth/access_token est devenue un JSON valide. La fonction parse_str analysait un mauvais format. Pour moi, changer ces lignes dans les bibliothèques/hybridauth/Hybrid/thirdparty/Facebook/base_facebook.php résolu le problème: code de changement

/** * Prolonger un jeton d'accès, tout en retirant le jeton de courte durée cela pourrait * avoir été généré via le flux côté client. Merci à http_bit_ly_b0Pt0H * pour la solution de contournement. */ fonction publique setExtendedAccessToken() { ...

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

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

... 

}

...

/** * récupère un jeton d'accès pour le code d'autorisation donnée * (précédemment généré à partir de www.facebook.com au nom de * un utilisateur spécifique). Le code d'autorisation est envoyé à graph_facebook_com * et un jeton d'accès légitime est généré à condition que le jeton d'accès * et l'utilisateur pour lequel il a été généré correspondent tous, et que l'utilisateur soit * soit connecté à Facebook ou ait accordé un accès hors connexion autorisation. * * @param string $ code Un code d'autorisation. * @param string $ redirect_uri URI de redirection facultative. Valeur par défaut * * @return mixed Un jeton d'accès échangé pour le code d'autorisation, ou * false si un jeton d'accès n'a pas pu être généré. */ fonction publique getAccessTokenFromCode ($ code, $ = redirect_uri null) { ...

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

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

... 

}

Pour:

/** * Étendre un jeton d'accès , tout en supprimant le jeton de courte durée * généré via le flux côté client. Merci à http_bit.ly_b0Pt0H * pour la solution de contournement. Fonction publique 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; 
    } 
} 

... 

}

...

/** * récupère un jeton d'accès pour le code d'autorisation donnée * (précédemment généré à partir www_facebook_com au nom de * un utilisateur spécifique). Le code d'autorisation est envoyé à graph_facebook_com * et un jeton d'accès légitime est généré à condition que le jeton d'accès * et l'utilisateur pour lequel il a été généré correspondent tous, et que l'utilisateur soit * soit connecté à Facebook ou ait accordé un accès hors connexion autorisation. * * @param string $ code Un code d'autorisation. * @param string $ redirect_uri URI de redirection facultative. Valeur par défaut * * @return mixed Un jeton d'accès échangé pour le code d'autorisation, ou * false si un jeton d'accès n'a pas pu être généré. */ fonction publique 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; 
    } 
} 

... 

}