2012-04-13 3 views
0

친구 데이터를 로컬 데이터베이스로 가져 오는 앱을 만들고 있는데 문제가 없습니다.cron에서 사용자 프로필에 액세스

매일 로컬 데이터베이스의 사용자 프로필을 반복하고 친구 데이터를 업데이트하는 cron에서 실행되는 스크립트를 만들려고합니다.

PHP SDK를 사용하고 있습니다.

depreacte_offline_access 플래그를 활성화했습니다.

액세스 토큰이 60 일 이내에 자동으로 만료되거나 다른 작업을 수행해야합니까?

사용자가 동일한 브라우저에서 앱이나 페이스 북을 통해 서명하면 cron 스크립트에서 프로필 데이터를 검색 할 수 있습니까? 다음 데이터베이스에 저장

$access_token = $facebook->getAccessToken(); 

다음으로 액세스 토큰을 설정합니다 :

$facebook->setAccessToken($new_access_token); 

내가 할 필요가 가진 액세스 토큰 PIN이있다 생각에 수정나요 그런 다음 프로필을 다시 보겠습니다.

$facebook->getUser('/me'); 

?

어떻게 액세스 토큰의 만료 날짜를 볼 수 있습니까?

아래는 스크립트를 반복하고 검색하는 스크립트이지만 브라우저에서 실행하면 현재 로그인 한 사용자 만 작동하거나 예외가 발생합니다. "OAuthException : 액세스 토큰 유효성 검사 중 오류가 발생했습니다. 세션이 유효하지 않습니다. 사용자가 로그 아웃했습니다. "

<?php 
require_once(THEME_INCLUDES_PATH . 'facebook.php'); 

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

$facebook = new Facebook($config); 

$sql = "SELECT `access_token` FROM `fb_user`"; 
$result = $db1->db_query($sql); 

while($details = $db1->db_fetch_array($result)){ 

    if($details['access_token']){ 

     $facebook->setAccessToken($details['access_token']); 
     $fb_user = $facebook->getUser('/me'); 

     if($fb_user){ 

      try { 
       $fb_profile = $facebook->api('/me');   
       print_r($fb_profile); 
      } 

      catch (FacebookApiException $e){ 
       echo $e; 
       $fb_user = false; 
      } 
     } 
    } 
} 
?> 

답변

0

offline_access가 더 이상 사용되지 않기 때문에 원하는 작업을 수행 할 방법이 없습니다.

아이디어는 사용자가 실제로 응용 프로그램과 상호 작용할 때만 응용 프로그램이 사용자 데이터에 액세스 할 수 있다는 것입니다. 액세스 토큰은 가져 오는 방법에 따라 약 60 일 동안 유효하지만 사용자가 앱을 삭제하거나 비밀번호를 변경하는 등 여러 가지 이유로 인해 무효화 될 수 있습니다.

그런 일이 발생하거나 만료 날짜가 도래하면 물론 사용자가 앱을 다시 등록한 다음 새로운 토큰을 받거나 보유하고있는 토큰을 연장 할 수있는 경우가 아니면 새로운 토큰을 얻기 위해 할 수있는 일은 없습니다. .

사용자가 실제로 앱과 상호 작용할 때 나중에 모든 데이터를 업데이트해야합니다.

official post about the deprecation of the offline_access 그것은 말한다 : 당신이 유효 "인증 코드"다시 서버 측 OAuth를 통화를 할 수 있도록를 얻을 수있어 전에

사용자는 응용 프로그램에 액세스해야합니다. 앱은 "인증 코드"가 만료되어 만료 되었기 때문에 이 만료 시간을 자동으로 연장하려고하는 백그라운드/크론 작업을 설정할 수 없습니다.


편집

공식 게시물 : 응용 프로그램이 client-side flow 또는 서명 요청 토큰을 가지고있는 경우 : Removal of offline_access Permission 새로운 엔드 포인트는 두 개의 사례 중 하나에 유효한 액세스 토큰을 확장 설명 :

아래 새 끝점을 사용하면 유효한 유효한 access_token의 만료 시간을 까지 확장 할 수 있습니다. access_token이 클라이언트 측 OAuth 호출에서 원래 생성되었거나 signed_request를 통해 생성 된 경우 실제로는 새로운 access_token을 반환합니다. access_token과는 서버 측 OAuth를 호출에서 생성되는

경우, 결과 access_token은이 이상 만료 시간을 갖게됩니다

는 또한 상태.

따라서 내게는 server-side flow을 사용하여 액세스 토큰을 생성하는 것이 간단합니다. 토큰을 무효화하는 이벤트 목록에 관해서는

, 그들은 전체 목록이없는,하지만 당신은 같은 페이지에 대한 정보를 찾을 수 있습니다

취급이 토큰은 사용자 암호 변경, 제거 만료 애플 리케이션, 당신의 앱이 offline_access 권한을 요청에 관계없이 경우

로그 아웃 사용자 사용자가 자신의 암호를 변경 응용 프로그램을 deauthorizes, 또는 로그 아웃 경우 정상적으로 상황에서 만료 된 액세스 토큰을 처리해야 애플 리케이션. 을 동일한 사용자 경험으로 이끄는 간단한 코드 솔루션을 포함하여 에 대한 정보는 blog post에서 확인할 수 있습니다.

그리고이 문서는 Handling Invalid and Expired Access Tokens입니다.

+0

기본적으로 맞지만 토큰은 다른 이유로 인해 무효화 될 수 있습니다 (내 답변에서 언급했듯이). –

+0

내가 알기로 사용자가 사이트에서 유효한 액세스 토큰을 얻으면 cron 스크립트는 자신의 프로필에 액세스 할 수 있지만 액세스 토큰의 만료 시간은 갱신 할 수 없게됩니다. 따라서 주된 문제는 offline_access 플래그를 활성화하면 자동으로 만료 날짜가 60 일 동안 지속되지 않는 것으로 보이며 내가해야 할 일이 확실하지 않은 것입니다. 그리고 다른 점은 액세스 토큰이 무효화 될 수있는 완전히 문서화 된 이벤트 목록이없는 것 같습니다. –

+0

귀하의 의견을 삭제하지 마십시오. 단지 나중에 읽는 사람이 혼란스럽게 만듭니다. 나는 더 많은 정보를 가지고 나의 대답을 편집했다. –

관련 문제