wake-up-neo.com

Kann ich überprüfen, ob das Facebook-Zugriffstoken noch gültig ist?

Meine Website verwendet lebenslange Zugriffstoken (offline_access). Wenn der Benutzer sein Kennwort ändert, wird das Zugriffstoken jedoch zurückgesetzt. Gibt es eine Methode, um zu überprüfen, ob das aktuelle Zugriffstoken gültig ist, bevor die Graph-API aufgerufen wird? Vielen Dank für Ihre Zeit.

71
axsuul

Grundsätzlich möchte FB, dass Sie danach abfragen oder den Fall erkennen und den Benutzer umleiten, damit ein Reauth auftritt. Ärgerlich, aber offiziell:

(Alter, veralteter Link. Siehe unten) https://developers.facebook.com/blog/post/500/

Bearbeiten: Facebook hat die Linkstruktur ohne Weiterleitungen geändert. Nicht überrascht.

https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/

37
Otto

Offline, ohne etwas an Facebook zu senden - das glaube ich nicht. Am einfachsten ist es wahrscheinlich, eine Anfrage an folgende Adresse zu senden:

https://graph.facebook.com/me?access_token=...

Facebook unterstützt auch Abonnements für Echtzeit Updates, aber ich bin nicht sicher, wie ich sie auf diese Situation anwenden soll.

69
serg

Wenn Sie die Ablaufzeit des Tokens erfahren möchten, können Sie mithilfe von appid und token eine URL für ein offenes Diagramm übergeben, wie nachfolgend beschrieben.

https://graph.facebook.com/oauth/access_token_info?client_id=APPID&access_token=xxxxxxxxx
43
7
Avi Kapuya

Die Echtzeit-Updates würden es Ihnen ermöglichen, dieses Problem zu lösen, aber es wäre ziemlich kompliziert. Grundsätzlich können Sie Updates abonnieren, die Ihnen mitteilen, 1) ob der Benutzer die App entfernt hat, oder 2) ob der Benutzer Berechtigungen entfernt hat. Sie können dies verwenden, um die aktuellen Berechtigungen des Facebook-Benutzers zu speichern. Auf diese Weise würden Sie wissen, dass das Zugriffstoken abgelaufen ist, wenn der Benutzer Ihre App entfernt hat.

Echtzeit-Updates sind eigentlich die von Facebook empfohlenen Methoden für den Umgang mit Berechtigungen. Viele Apps führen API-Aufrufe jedes Mal durch, wenn eine Seite geladen wird, um nach Berechtigungen zu suchen. Dies ist in der Regel langsam und unzuverlässig.

4
Nathan Totten
        //When user access token expires user must be logged in and renew the access token him self.it is a Facebook policy 
        //you can overcome this by sending email to users who have expired access token.
        //create a table of successful sending to monitor sending process
        //if any failure happened with the user an email is sent to him to ask him to activate there account again.with a link to your subscription page.
        //and here is the code should be written on that page. 
         $app_id = "YOUR_APP_ID";
         $app_secret = "YOUR_APP_SECRET"; 
         $my_url = "YOUR_POST_LOGIN_URL";

        // known valid access token stored in a database 
        $access_token = "YOUR_STORED_ACCESS_TOKEN";

        $code = $_REQUEST["code"];

       // If we get a code, it means that we have re-authed the user 
       //and can get a valid access_token. 
       if (isset($code)) {
         $token_url="https://graph.facebook.com/oauth/access_token?client_id="
           . $app_id . "&redirect_uri=" . urlencode($my_url) 
           . "&client_secret=" . $app_secret 
           . "&code=" . $code . "&display=popup";
         $response = file_get_contents($token_url);
         $params = null;
         parse_str($response, $params);
         $access_token = $params['access_token'];
       }


       // Attempt to query the graph:
       $graph_url = "https://graph.facebook.com/me?"
         . "access_token=" . $access_token;
       $response = curl_get_file_contents($graph_url);
       $decoded_response = json_decode($response);

       //Check for errors 
       if ($decoded_response->error) {
       // check to see if this is an oAuth error:
         if ($decoded_response->error->type== "OAuthException") {
           // Retrieving a valid access token. 
           $dialog_url= "https://www.facebook.com/dialog/oauth?"
             . "client_id=" . $app_id 
             . "&redirect_uri=" . urlencode($my_url);
           echo("<script> top.location.href='" . $dialog_url 
          . "'</script>");
        }
        else {
          echo "other error has happened";
        }
      } 
      else {
      // success
        echo("success" . $decoded_response->name);
        echo($access_token);
      }

      // note this wrapper function exists in order to circumvent PHP's 
      //strict obeying of HTTP error codes.  In this case, Facebook 
      //returns error code 400 which PHP obeys and wipes out 
      //the response.
      function curl_get_file_contents($URL) {
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
        curl_close($c);
        if ($contents) return $contents;
        else return FALSE;
      }
1
ashraf mohammed

Offline - es ist nicht möglich

Fragen Sie, ob der Benutzer die Erlaubnis gegeben hat oder nicht:

https://graph.facebook.com/{facebook-id}/permissions?access_token={access-token}

Wenn das Zugriffstoken ungültig ist, wird ein Fehler ausgegeben:

{  
   error:{  
      message:"The access token could not be decrypted",
      type:"OAuthException",
      code:190
   }
}

Andernfalls wird eine Liste der Berechtigungen angezeigt, die der Benutzer erteilt hat:

data:[  
   {  
      installed:1,
      ...... permission list......... 
      bookmarked:1
   }
]
1
Hitesh Modha

Ich habe diese Posts durchgesehen und dabei sehr gute Lösungen gefunden:

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app_id}|{app_secret}

Die Antwort auf diese Anfrage bietet Ihnen alles, was Sie brauchen:

  • Ihre App-ID - Dies bestätigt, dass das Token aus Ihrer Anwendung stammt
  • Anwendungsname - das kann auch überprüft werden
  • expires_at - Ablaufzeit des Tokens
  • is_valid - Boolescher Wert für die Überprüfung
  • ser_id - was Sie auch vergleichen und überprüfen können

Beachten Sie einfach, dass "|" Zeichen muss als Brief da sein

1
Pavol Golias

Aktualisierung, da sich die Dinge seit OP geändert haben:

Sie können Zugriffstoken hier debuggen: https://developers.facebook.com/tools/debug/accesstoken?version=v2.5&q= {access_token}

0
Kevin Cantwell