2011-08-07 3 views
0

(FBML 및 FBJS는 Facebook에서 사용되지 않으므로 이러한 접근 방식을 사용하여 내 서버에 데이터를 전달할 수 없습니다.)Ajax를 통해 Facebook 응용 프로그램에서 내 서버로 데이터를 전달하는 방법은 무엇입니까?

저는 IFRAME Facebook 응용 프로그램을 가지고 있으며 주로 페이지에서 사용하도록 제작되었습니다.

페이지 관리자가 페이지에서 내 애플리케이션 탭을 방문하면 페이지에 대한 정보를 추가하는 설정 페이지가 표시됩니다. 제출 버튼도 있습니다. 페이지 관리자가 자신의 페이지에 대한 정보를 제출하면 내 서버로 보내지고 페이지 ID와 함께 저장됩니다. 이 설정이 완료되면 다른 사용자가 페이지의이 애플리케이션 탭을 방문하면 페이지 관리자가 게시 한 정보가 표시됩니다.

페이스 북의 PHP SDK을 서버 측에서 사용하여 서명 된 요청을 디코딩하고 페이지 ID를 얻습니다.

다음 (페이지 ID는, 전달 여기에 표시되지 않습니다 사용자 입력과 함께) 내 응용 프로그램의 index.php의 코드가내 서버에 데이터를 보낼 수있다

function sendData() { 
    $.post('ajax.php', { 
     data : $("#userdata").val() 
    }, function(data) { 
     alert(data); 
    }); 
} 
</script> 

다음은 간단한 ajax.php 스크립트입니다. 이것은 현재의 테스트 스크립트 일뿐입니다.

<?php 
echo "<pre>" . print_r($_POST) . "</pre>"; 
?> 

문제는 사용자 데이터가 서버로 전송되는 것입니다. 이 접근법에는 보안 문제가 있습니다. 'signed_request' (페이스 북은 처음에 요청을 확인하는 데 사용하는 index.php로 전송 함) 사용자 데이터와 함께 보내야하므로 서버 측의 요청을 확인하고 오른쪽에 대한 정보를 업데이트 할 수 있습니다. 페이지. 그렇지 않으면 누구나 이와 같은 요청을 게시하고 페이지의 정보를 업데이트 할 수 있습니다.

firebug image

+1

양식 입력의 유효성을 검사하기 위해 'signed_request'를 보낼 필요가없는 경우 [CSRF] (http://en.wikipedia.org/wiki/Cross-site_request_forgery) 토큰을 보내야합니다. php-sdk를 사용하고 있다면 세션에서 서버에 'signed_request'가 있어야합니다. – ifaour

답변

1

당신은뿐만 아니라 서버 측 AJAX 스크립트에서 페이스 북 PHP SDK를 사용하기 만하면, 당신은 요청이 앱에 권한을 부여한 유효한 페이스 북 세션과 사람에 의해 전송 된 것을 확인하실 수 있습니다 .

응용 프로그램을 사용하는 여러 사용자가 서로 다른 페이지 설정을 변경하기 위해 가짜 요청을 보내려는 경우, Facebook ID가 관리하는 Facebook 페이지와 관련된 정보를 저장하면됩니다.

예를 들어 서버에 요청을 보내면 페이지 ID에서 파생 된 암호화 된 키와 함께 페이지 ID를 보냅니다 (자체를 표시하는 동안이 암호화 된 키를 숨겨진 필드에 보관하십시오). 서버에서이 키를 해독하여 페이지 ID와 일치시킵니다. 이렇게하면 페이지 관리자가 '자신의'페이지에 대한 정보 만 수정한다는 것을 확신 할 수 있습니다.

관련 문제