8

Używam pakietu Facebook PHP SDK do wywoływania odpowiednich interfejsów API w celu publikowania i pobierania danych. Obecnie zapisuję token dostępu użytkownika w bazie danych, ale wygasa po 60 dniach. Jak mogę odświeżyć token dostępu użytkownika?jak odświeżyć token dostępu do Facebooka po stronie serwera (w Facebook-php SDK)?

1. Kiedy muszę odświeżyć tokeny dostępu? Po wygaśnięciu lub wcześniej?

2. Jaki jest najlepszy sposób na odświeżenie tokenów dostępu?

3. Czy moi użytkownicy muszą się ponownie zalogować, aby odświeżyć token dostępu?

Jest to funkcja, której używam do rozszerzenia tokenu dostępu. ale czas wygaśnięcia pozostaje ten sam.

public function getExtendedAccessToken($access_token) 
    {  

     $token_url="https://graph.facebook.com/oauth/access_token"; 
     $params=array('client_id'=>self :: appId,'client_secret'=>self :: appSecretId,'grant_type'=>'fb_exchange_token','fb_exchange_token'=>$access_token); 

      $response = $this->curl($token_url,$params);     
      $response = explode ('=',$response); 
      $response = explode ('&',$response[1]); 
      $response = $response[0];  
      return $response; 

    } 
+0

Tak, użytkownik musi odwiedzić swoją aplikację ponownie, aby uzyskać nowy token dostępu. – CBroe

Odpowiedz

6

access token nie mogą być odświeżane ot tak, użytkownik powinien otworzyć aplikację ponownie, aby uzyskać nowy token.

Możesz odświeżyć token w dowolnym momencie. W rzeczywistości najlepszym sposobem jest odświeżenie tokena za każdym razem, gdy użytkownik odwiedza Twoją aplikację. W ten sposób token nigdy nie straci ważności, jeśli użytkownik będzie odwiedzać aplikację raz na 60 dni.

+0

Dzięki za odpowiedź. Problem polega na tym, że użytkownik może odwiedzić moją aplikację ponad 100 razy dziennie. niż będzie odświeżać 100 razy. Czy to w porządku?? i jak mogę odświeżyć token dostępu? –

+0

Cóż, odświeżanie 100 razy dziennie byłoby prawdopodobnie przesadą, dlaczego nie robić tego co najwyżej raz dziennie? Odświeżenie tokena dostępu jest wyraźnie udokumentowane, wklejenie parametrów punktu końcowego w tym miejscu byłoby po prostu zbędne: https://developers.facebook.com/docs/facebook-login/access-tokens/#extending – Igy

+0

Tak, zaimplementowałem tę technikę w moim projekt, ale nie przekracza czasu. zobacz poniższy punkt w tym łączu. wspomina, że ​​musisz odświeżyć token dostępu i to jest moje pytanie jak? –

0

Spróbuj tego:

$app_id = FB_APP_ID; 
$app_secret = FB_SECRET_ID; 
$canvas_URL = FB_PAGE_URL; 
$code = $_REQUEST["code"]; 

if(empty($code)) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . $canvas_URL . "&state=" 
    . $_SESSION['state']; 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
} 
if($_REQUEST['state'] == $_SESSION['state']) { 
$facebook->api('oauth/access_token', array(
    'client_id'  => FB_APP_ID, 
    'client_secret' => FB_SECRET_ID, 
    'type'   => 'client_cred', 
    'code'   => $code, 
)); 
$token = $facebook->getAccessToken(); 
echo$token; 
} 
0

public function getExtendedAccessToken ($ access_token) {

$token_url="https://graph.facebook.com/oauth/access_token"; 
    $params=array('client_id'=>self :: appId,'client_secret'=>self :: appSecretId,'grant_type'=>'fb_exchange_token','fb_exchange_token'=>$access_token); 

     $response = $this->curl($token_url,$params);     
     $response = explode ('=',$response); 
     $response = explode ('&',$response[1]); 
     $response = $response[0];  
     return $response; 

} 
+1

Dodaj wyjaśnienie wraz z kodem, aby pomóc innym. –

Powiązane problemy