2012-05-22 5 views
3

facebook 액세스 토큰을 무효화 할 수 있습니까?Facebook 액세스 토큰 무효화?

offline_access의 최근 지원 중단으로 인해이 작업을 수행해야합니다.

문제는 토큰을 60 일 이상 연장 할 수 없다는 것입니다. 사용자가 오해하지 않는 한 앱으로 돌아 오더라도

그래서 토큰을 무효화 한 다음 즉시 사용자를 다시 로그인하여 새로운 액세스 토큰을 다시 얻을 수 있습니다. 새로운 60 일 만료일. 사용자가 2 개월에 한 번씩 오는 한 모든 것이 정상적이어야합니다.

FB.logout을 사용할 수 없으므로 Facebook에서 사용자를 로그 아웃하고 싶지 않습니다.

그럴 수 있습니까?

답변

3

/me/permissions에게 DELETE 요청을 보내면 사용자 세션을 무효로 할 수 있습니다.

그러나 나는 왜 당신이 그렇게하고 싶은지 정말로 볼 수 없습니다. 이전에 가지고 있던 토큰에 관계없이 60 일 토큰으로 끝나는 서버 측 인증을 사용할 수 있습니다. 그래서 60 일을 더 기다리고 싶을 때마다 서버 측 프로세스를 사용하여 사용자를 인증하면됩니다.

+0

감사합니다. 시도 할 것입니다. 제안에 관해서는 확실합니까? "단점은 단명 된 사용자의 access_tokens를 확장하는 데에만 사용할 수 있습니다. 만료 시간이 긴 access_token을 전달하면 끝점은 단순히 만료 시간을 변경하거나 연장하지 않고도 동일한 액세스 정보를 다시 확인할 수 있습니다. " - 이미 만료 액세스 토큰이 긴 경우 만료 날짜를 업데이트하지 않습니다. – Wesley

+0

그래, 같은 장소에서 ("시나리오 3 : 서버 측 OAuth 개발자"*) :'해당 사용자에 대해 유효한 수명이 긴 사용자 access_token이있는 동안 호출이 이루어지면 반환 된 사용자 access_token 이 제 2 호로부터의 호는 동일하거나 변경 될 수 있지만, 어느 경우 에나 만료 시간은 긴 만료 시간으로 설정 될 것이다. 여기서 클라이언트 토큰을 사용할 수는 없으며 서버 토큰 만 사용할 수 있습니다. –

+0

글쎄, 끝점을 여러 번 호출했지만 만료 시간이 업데이트되지 않았 음을 테스트했습니다. 아마 이것은 내가 하루를 기다리지 않았기 때문일까요? 이미이 프로젝트에 사용 해본 적이 있습니까? – Wesley

0

액세스 토큰을 무효화 할 필요가 없습니다.

새로운 단기 사용 액세스 토큰을 사용하면 새로운 연장 된 60 일 토큰을 반환합니다. 사용자가 앱을 다시 사용할 때 특정 단명 토큰이 항상 제공됩니다. 수명이 짧은 토큰을 얻을 수 있도록 클라이언트 측 인증 흐름 (JS SDK)을 사용하십시오. 토큰 교환을위한 새로운 끝점을 사용하십시오.

자세한 내용은 facebook doc을 확인하십시오.

+0

그러나 짧은 수명의 토큰을 사용하고 끝점을 통해 교환하는 경우 동일한 오래 살았던 토큰 (만료되기 전에 며칠 밖에 남지 않음)이 반환됩니다. (참고, 나는 아직 다시 시도하기 전에 하루 기다리지 못했습니다) – Wesley

+0

@dragonjet - "짧은 수명의 토큰은 사용자가 앱을 다시 사용할 때 항상 제공됩니다"라는 것을 설명해 주시겠습니까? 그것이 나에게 주어지는 사람은 어떻게 얻을 수 있습니까? 감사! – avs099

1

Facebook documentation에 따르면 복잡한 작업을 수행 할 필요가 없습니다.

사용자 로그인 프로세스에서 수명이 짧은 액세스 토큰을 검색하고이를 60 일 동안 유효 기간이 긴 액세스 토큰으로 교환하십시오.

사용자가 하루 동안 여러 번 로그 아웃했다가 로그하면 동일한 액세스 토큰 (아마도)을 받게되지만 만료 시간은 업데이트되지 않습니다. 그러나 적어도 하루 만 지나면 새로운 만료 시간이있는 새로운 장기 액세스 토큰을 받게됩니다.

유일하게 가능한 문제는 사용자가 2 개월 이상 (60 일 이상) 지속적으로 로그인되는 시나리오입니다. 그러한 시나리오의 경우 (간신히 가능할 수도 있음), 토큰이 만료되면 백그라운드에서 갱신하는 약간의 타임 아웃 기능을 코딩합니다.

어제 오후에 수명이 긴 토큰을 검색하여 사용하기 위해 리팩터링하므로 충분한 시간이 주어지지 않았지만 언급 된 Facebook 문서에 따르면 그렇게되어야합니다.

2

현실적으로 페이 스북 (Facebook)이 안전하지만 웹 사이트가 아니라는 것을 비동기 적으로 전염병처럼 Facebook Javascript SDK를 피하는 것을 진지하게 고려할 것입니다.

난 그냥 내 로그인 흐름을 다시 시작했습니다 내 코드의이 부분은 관리 사용자 토큰을 위해 유용하게 사용할 수 있는지 궁금 오전 :

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $fb_error = $e->getResult(); 
    error_log($e); 
    $user = null; 
    } 
} 


//https://developers.facebook.com/docs/reference/api/errors/ 
switch ($fb_error['error']['error_subcode']) { 
    case '458': 
    //Returned on app trying something or user attempting an action after app deauth 
    //Can do database cleannup operations from this 
     $fb_error = '458 - User removed the app from user settings'; 
     break; 
    case '460': 
    //App is no longer reauthorized and the user is trying something ? 
    //Stop user from all activities if this comes up as they may deauth then try perform an action 
     $fb_error = '460 - User needs to reauthorize'; 
     break; 
    case '463': 
    //Expired Token 
    //This is where we autolog the user back in 
     $fb_error = '463 - Token has expired and a new one needs to be requested'; 
     //need to somehow get the login request code from another page to hide it 
     //or use htaccess tricks 
     $facebook->getAccessToken(); 
     break; 
    case '467': 
    //Invalid Token 
    //This is where we autolog the user back in 
     $fb_error = '467 - Token is invalid and a new one needs to be requested'; 
     break; 
} 

당신 수 출력 테스트를위한 페이지 오류 : PHP 스위치 복수 응답 (경우) 단일 if 문처럼 작동

echo 'Error Subcode: '.$fb_error.'<br/>'; 
echo 'Facebook Error Dump:<br/>'; 
var_dump($e); 

참고.

코드 속도 최적화를 위해 스위치 상단에 가장 일반적인 오류가 나열되도록 스위치를 재정렬하는 것이 좋습니다. PHP 스위치 작동 방식은 오류 코드와 대소 문자가 일치 할 때까지 목록을 실행하는 것입니다.