2012-03-12 3 views
0

이 주제를 연구 중이므로 Javascript SDK에 대해 아무 것도 찾을 수 없습니다. PHP와 C#에 대한 예제를 발견했지만 Javascript SDK에 대해서는 아직 확실하지 않습니다. 내가 말할 수있는 것부터 JS SDK가있는 페이지를 설정하고이를 인증 해제 콜백 URL에 넣고 해당 페이지의 authResponseChange 이벤트에 가입하십시오.Facebook JS SDK와 함께 Deauthorize 콜백 URL을 사용하는 방법?

내가 알 수있는 최선의 방법이지만,이 접근법이 작동하면 어떤 예나 확인도 찾지 못했습니다. 모든 사례가 훌륭하게 제공 될 수 있다면.

자바 테스트 콘솔 : http://developers.facebook.com/tools/console/에서 테스트했지만 그 방법은 이전 나머지 API의 취소 인증을 사용합니다. 인증 해제 콜백 URL을 사용하여 사용자 계정에서 Facebook 연결을 제거하려고합니다.

답변

8

서버에서 처리해야합니다. Deauthorize 콜백은 서명 된 요청 값을 포함하는 sign_request의 양식 매개 변수로 url에 대한 양식 POST로 제공됩니다. 앱을 삭제 한 사용자의 사용자 아이디를 얻으려면 앱 비밀번호를 사용하여 서명 된 요청 값을 파싱해야합니다. 그런 다음 사용자가 앱을 삭제할 때 앱의 데이터베이스를 업데이트하거나 적절한 작업을 수행 할 수 있습니다.

signed_request 값을 구문 분석/해독하기 위해 앱 비공개를 사용해야하기 때문에 자바 스크립트에서이 클라이언트 측을 원하지 않습니다.

+0

알 수 있습니다. Javascript SDK로 가능했는지 알지 못했습니다. – Brandon

-1

"Facebook javascript de-authorize"를 검색하여이 게시물을 검색하는 사용자의 편의를 위해 Facebook JavaScript SDK v2.1에서는 앱 인증을 취소 할 수 있습니다.

/* make the API call */ 
FB.api(
    "/me/friends", 
    function (response) { 
     if (response && !response.error) { 
     /* handle the result */ 
     } 
    } 
); 
+3

이것이 실제로 JS SDK로 앱을 인증 해제하는 데 어떻게 도움이됩니까? –

0

당신은 당신의 응용 프로그램의 설정에 특정 URL을 추가 할 필요가, 당신은 사용자가 응용 프로그램을 인증 해제 해당 URL에 POST 요청을 얻을 것이다 :

는, 특히 자바 스크립트 SDK 탭을 https://developers.facebook.com/docs/graph-api/reference/v2.1/user/permissions#delete
를 참조하십시오.

요청 본문에 signed_request이 있습니다. signed_request에서 유용한 데이터를 얻으려면 다음을 수행해야합니다.

암호를 사용하면 도움이됩니다. https://www.npmjs.com/package/crypto

const crypto = require('crypto'); 

    function parseRequest(signed_request, secret){ 
     signed_request = signed_request.split('.'); 
     var encoded_sig = signed_request[0]; 
     var payload = signed_request[1]; 


     var data = JSON.parse(new Buffer(payload, 'base64').toString()); 

     if (data.algorithm.toUpperCase() !== 'HMAC-SHA256') 
     return null; 

     var hmac = crypto.createHmac('sha256', secret); 
     var encoded_payload = hmac.update(payload).digest('base64') 
     .replace(/\//g, '_').replace(/\+/g, '-').replace(/={1,2}$/, ''); 

     if (encoded_sig !== encoded_payload) 
     return null; 

     return data; 
    } 
관련 문제