2014-08-29 3 views
1

SDK v.4에서 작업 중이지만, 클래스 FacebookRedirectLoginHelper 메서드 isValidRedirect에 문제가있는 것 같습니다. $_GET['state'] 콜백 URL에 변수이고 $this->state가 안전한 암호화 pseudrandom 번호를 생성하는 기능 random() 할당되지만Facebook isValidRedirect는 항상 false를 반환합니다.

는 SDK 코드

protected function isValidRedirect() 
    { 
    return $this->getCode() && isset($_GET['state']) 
     && $_GET['state'] == $this->state; 
    } 

이다.

모두 $ _GET [ 'state'] 및 $ this-> 상태; 결코 사실로 돌아 가지 않을 것입니다! 당신이 코드를 자세히 보면

그것은, 실제로 $ _SESSION하지 $ _GET

답변

1

를 확인해야한다는 loadState() 기능은 실제로 $this->state$_SESSION로드를의 상태를 찾습니다. isValidRedirect()은 이후에 호출되며 이로드 된 $_SESSION을 사용합니다.

Facebook에 로그인 한 후 URL에 $_GET['state']이 있다는 것을 알 수 있으므로이 검사가 유효합니다. 그렇지 않은 경우 코드는 access_token으로 교환되지 않습니다.

+0

예를 들어 답을 설명해 주실 수 있습니까? 어떻게 위의 상태가 발생하지 않도록하려면? 즉 $ _GET [ 'state'] & $ this-> state가 일치하지 않습니다. –

+0

facebook이 내 URL로 돌아 오면, getLoginUrl() 함수를 다시 호출합니다. 내 질문에, if ($ _ SESSION [ 'FBRLH_state'] == '')와 같은 조건을 부여한 다음 getLoginUrl() 함수 만 호출하면됩니까? –

+1

'getLoginUrl()'함수는 API 호출을하지 않으므로 코드에서 다시 호출되는지는 중요하지 않습니다. 더 좋은 방법은'$ _GET [ 'code']'를 찾는 것입니다. 페이스 북이 로그인 할 때 리턴 할 것이기 때문입니다. 내 예제를 여기에서보십시오 : https : //www.webniraj.com/2014/05/01/facebook-api-php-sdk-updated-to-v4-0-0/ –

0

나는 또한 비슷한 문제가있어서 방금 고쳤습니다.

포인트는 'state'변수에 관한 것입니다.

은 새로운 '상태'를 생성하므로 첫 번째 단계에서는 getLoginUrl() 만 호출합니다.

1 단계 : 페이지를 표시하며 링크는 getLoginUrl()에 의해 생성됩니다. 사용자가 다음 링크를 클릭하고, 는 사용자가 자신의 페이스 북 이름과 암호를 입력 할에, 페이스 북 선서 대화 상자로 리디렉션됩니다 : 여기에 나는 값이 X를

2 단계라고, 상태를 얻었다 앱이 사용자의 공개 정보에 액세스하도록 허용합니다.

3 단계 : 따라서 사용자가 '국가'와, 내 사이트로 다시 리디렉션, 나는 getLoginUrl() 여기라고하면 값이 X를

이며, 새로운 '상태가'생성됩니다, isValidRedirect()는 항상 false를 반환합니다.

그래서 내가 먼저 isset($_GET['state']), 을 확인하고 isset($_GET['state'])TRUEgetLoginUrl()를 호출하지 않습니다.

이 정보가 도움이되기를 바랍니다.

+0

나는 이것이이 경우를 알고 있었고이 문제를 피하기 위해 나의 신청서를 작성했지만 아직도 얻는다. store_state 함수에 var_dump를 추가 했으므로 세션 값을 업데이트하는 시점을 알 수 있습니다. 예상대로 URL을 생성하기 위해 한 번 실행되고, 페이스 북에서 돌아 오면 한 번만 실행되지만 세션 값과 값을 얻는 것은 어떤 이유로 든 결코 일치하지 않습니다. 나는 이것에 초조 한 시간의 시간을 보냈다. 그리고 나는 이것이 어떻게 일어나는지 볼 수 없다. –

관련 문제