2012-04-02 5 views
1

私は、php-sdkのgetUser()メソッドが常にゼロを返すという、他の多くの人々と同じ問題を抱えています。 この理由は、parseSignedRequest()メソッドの条件であることがわかりました。facebook-> getUser()は常に0を返す

if ($sig !== $expected_sig) { 
    self::errorLog('Bad Signed JSON signature!'); 
    return NULL; 
} 

条件は常にtrueです。この状態をコメント解除すると、正常に動作します。私は正しいユーザーを取得し、私は尋ねるすべてのpermissonとトークンをフェッチすることができます。

しかし、私はこの汚れた溶液に不快感を感じました。それはなぜできますか?サーバーに誤った構成が存在する可能性があります。

種類は、私は..それを追跡するために私に4日間を取った正確に同じ問題を抱えてい

答えて

0

...ここ

あなたは$を持って、条件付きの私のデバッグエコーの結果だについてsigは$ expected_sigと比較されます。

SIG:[ꢖbuf^ 4֣GP

期待SIG:{.nwW:rBの C8$ %F

何らかの理由で、送信される署名が、期待される任意の符号化された署名と一致していません。

私は疑問に思っていました...ここで何が間違っているのでしょうか?

私は自分の設定で正しく設定していますが、適切な「秘密」を渡すことはできませんか?私は

$facebook->getAppID(); 

または

$facebook->getAppSecret(); 

NOTHINGを使用

require_once("facebook.php"); 

$config = array(); 
$config[‘appId’] = $APP_ID; 
$config[‘secret’] = $APP_SECRET; 
$config[‘fileUpload’] = false; // optional 

$facebook = new Facebook($config); 

結局のところは、返却されています!

私getSignedRequestCookieName()関数は、唯一の "fbsr_"

を返す理由

$expected_sig = hash_hmac('sha256', $payload, 
          $facebook->getAppSecret(), $raw = true); 

が間違ったハッシュを返しなぜこれがこれがあるさ!

しかし、なぜですか?

単純な答え:ひどく形成のconfig配列...

使用 "$の設定[『のAppID』] = $ APP_IDを、" ... "のAppID" の前後に引用符を気づきます。これは、facebookの開発者ドキュメントのdocs/examplesからの直接コピー/貼り付けでした。

標準二重引用符

$config = array(); 
$config["appId"] = $APP_ID; 
$config["secret"] = $APP_SECRET; 
$config["fileUpload"] = false; // optional 

でそれらの引用符を置き換え...

SIG:ここでの結果ですr0g%のW(B^DDV

期待SIG:r0g% W(B^DDV

彼らは今、一致...

かいつまんで...あなたはsigned_requestトークン取得していることを確認するためには、phpinfo()を実行..あなたがそれを取得していると確信しているならば(または、 "$ REQUEST [fbsr ######]" var)...あなたが符号化された署名入りの要求を得ていることが確かであれば...あなたのハッシュが一致しない理由は、あなたが取得していない場合のみですそこの正しい秘密。

関連する問題