2012-04-02 2 views
1

나는 php-sdk의 getUser() 메소드가 allways 0을 돌려 준다는 것과 같은 문제를 가지고있다. 그 이유는 parseSignedRequest() 메서드의 조건입니다.facebook-> getUser() 항상 0을 돌려 준다.

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

조건은 항상 true입니다. 이 조건의 주석을 제거하면 올바르게 작동합니다. 올바른 사용자를 얻었고 요청한 모든 허가와 함께 토큰을 가져올 수 있습니다.

그러나 나는이 더러운 해결책에 불편 해했다. 왜 그럴 수 있죠. 서버에 잘못 구성되었을 수 있습니다.

종류는 내가 .. 그것을 추적하는 나에게 사일을 취한 동일한 문제가 있습니다

답변

0

... 여기

당신이 $이 조건의 내 디버그 에코의 결과이다 관하여 sig는 $ expected_sig와 비교됩니다.

SIG : ꢖbuf^4 ֣ GP

예상 SIG {.nwW : RB C8 $ % F

어떤 이유로 든 시그너처가 예상되는 인코딩 된 시그너처와 일치하지 않습니다.

내가 궁금해하던 ... 여기서 무엇이 잘못 될 수 있나?

내 설정에서 올바르게 설정하더라도 적절한 "비밀"을 전달하지 않을 수 있습니까? 내가

$facebook->getAppID(); 

또는

$facebook->getAppSecret(); 

아무것도 사용

require_once("facebook.php"); 

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

$facebook = new Facebook($config); 

이 밝혀 바와 같이, 반환됩니다! 내 getSignedRequestCookieName() 함수는

이 왜

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

반환 잘못된 해시 "fbsr_"만 반환하는 이유

이입니다!

왜?

간단한 답 : 사용 잘못된 형식 설정 배열 ...

"$의 설정 [ 'APPID를'] = $ APP_ID;"... 주위에 "APPID"를 따옴표를 확인할 수 있습니다. 이것은 페이스 북 개발자 문서의 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() 할 .. . 당신이 그것을 확신하고 있다면 (또는 "$ 요청 [fbsr ######]"var) ... 인코딩 된 서명 된 요청을 받는다는 것을 확신한다면 ... 해시가 일치하지 않는 유일한 이유는 그곳의 올바른 비밀.

관련 문제