私はこの質問を Facebook Developer Group に投稿しましたが、誰も完全な答えを出すことができませんでした. サーバー側認証を使用する Facebook アプリケーションがあります。コードは次のようになります。
$config = array();
$config['appId'] = $fbconfig['appid'];
$config['secret'] = $fbconfig['secret'];
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
//Facebook Authentication part
$mobile = false;
$code = false;
if (isset($_GET["code"]) && !empty($_GET["code"]) && strlen($_GET["code"])>1){
$code = trim($_GET["code"]);
}
//MOB VAR
if (isset($_REQUEST['mob']) && !empty($_REQUEST['mob']))
{
mobile = true;
}else{
}
if ($mobile){
$loginUrl = $facebook->getLoginUrl(
array(
'redirect_uri' => $fbconfig['baseUrl'].$loginpart,
'scope' => 'email,user_likes'
)
);
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".APP_ID."&redirect_uri=".urlencode($fbconfig['baseUrl'].$loginpart)."&client_secret=".$fbconfig['secret']."&code=".$code;
}else{
$loginUrl = $facebook->getLoginUrl(
array(
'redirect_uri' => $fbconfig['appBaseUrl'].$loginpart,
'scope' => 'email,user_likes'
)
);
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".APP_ID."&redirect_uri=".urlencode($fbconfig['appBaseUrl'].$loginpart)."&client_secret=".$fbconfig['secret']."&code=".$code;
}
if ((!isset($_GET['code']) || empty($_GET['code']) ) ) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
} else{
if ($code){
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$access_token = $sessionKey = $AccessToken = $params['access_token'];
if(isset($AccessToken) && !empty($AccessToken)){
if(isset($params['expires'])){
$ExpDate = $params['expires'];
迷惑にならないようにコードを短くしました。
問題
何らかの理由で、コードは$ExpDate
3000 秒から 7000 秒の短い値を返します。これはすべてのユーザーではなく、10% ~ 15% のユーザーに発生します。
私が試したこと
- Facebook は長寿命の access_token を返す必要があるという事実にもかかわらず、私はそれを
/oauth/access_token?
URL と交換しようとしました。結果なし: 同じ有効期限を返します。 $SERVER['HTTP_USER_AGENT']
私は、短命の access_tokens でユーザーが持っている共通点を見つけるためにキャッチしようとしました。結果なし: すべてが異なります (モバイル デバイス、デスクトップ、IOS ネイティブ Facebook アプリからのものである可能性があります....)- プライバシー設定から可能なすべてのバージョンに設定を変更し、アプリケーションをインストール、削除して、状況を再現しようと何度も試みました。結果はありません:私にとっては完璧に機能します。
- ユーザーのコードを保存し、access_token を手動で取得しようとしました。コードは一度しか使用できないことを忘れていたので、それを行うことができませんでした.
どうすれば助けられますか
- 誰かが同じ認証方法を使用している場合は、データベースを確認してください。同じ問題がありますか?
- 誰かがなぜこれが起こるのか考えているなら、理由を見つけるのを手伝ってください.
- これがバグであることが判明した場合は、Facebook でバグ レポートを作成できます。
ありがとうございました。