12

Facebook は offline_access トークン機能を削除しました。ユーザーが Web サイトにアクセスするたびにトークンを更新して、トークンをアクティブに保つ必要があります。

誰かがすでにあなたの Web サイトへのアクセスを許可しており、その人のためにトークンが保存されているとします。そのトークンを更新するには、Facebook の PHP ライブラリでどのコードを使用しますか?

4

4 に答える 4

8

次の方法でトークンを拡張できます。

オリジナルシナリオ

  • アプリがユーザーに権限をリクエストします
  • ユーザーにログイン/権限の付与を求める
  • ユーザーのトークン (有効期間が短いもの) を取得し、CURL または grant_type=fb_exchange_token を使用して 60 日のものと交換します。
  • トークンを永続化します

これで、そのトークンを使用して、最大 60 日間、好きなことを行うことができます。ユーザーがパスワードを変更したり、アプリの認証を取り消したりすることができ、トークンが無効になるためです。トークンを延長するためにできることは、ユーザーがページにアクセスするたびに、JavaScript を介してログインしているかどうかを確認し、ログインしている場合はサーバーに ajax 呼び出しを行い、既存のトークンを 60 日間延長することです。今日。最初の 1 つだけが有効です。これが私がそれを行う方法です:

  1. load イベント中のページのどこかに、次のようなものを追加します。

     FB.getLoginStatus(function (response) {
         if (response.status === 'connected') {
            $.ajax({
                type: "POST",
                async: false,
                url: YOUR_URL,
                dataType: "text",
                data: {token  : response.authResponse.accessToken }
             });
         }
     });
             //rest of jquery ajax call here
    

これにより、ユーザーの新しいクライアント側アクセストークンが取得され、サーバーに送信されます

  1. サーバーはそのトークンを受け取り、60 日のものと交換できます。

    $token_url = "https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_CLIENT_ID."&client_secret=".FACEBOOK_SECRET."&grant_type=fb_exchange_token&fb_exchange_token=".$token;
    
    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_URL, $token_url);
    $contents = curl_exec($c);
    $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
    curl_close($c);
    
    $paramsfb = null;
    parse_str($contents, $paramsfb);        
    

参照:

https://developers.facebook.com/roadmap/offline-access-removal/

ユーザーが 60 日以内にサイトに戻ってきた場合にのみ、トークンが延長されます。そうでない場合は、再度許可を求める必要があります。

于 2012-04-08T03:50:06.887 に答える
1

更新しました

はい@zerkmsは正しいです。アプリケーションに権限がある場合、access_tokenは必要ありません。

With this permission, you can publish content to a user's feed at any time. However, please note that Facebook recommends a user-initiated sharing model. Please read the Platform Policies to ensure you understand how to properly use this permission. Note, you do not need to request the publish_stream permission in order to use the Feed Dialog, the Requests Dialog or the Send Dialog.

すべての拡張アクセス許可には、同様の特権があります: https://developers.facebook.com/docs/authentication/permissions/

于 2012-04-05T07:28:51.243 に答える
0

これが私が現在していることです

public function setExtendAccessToken($accessToken = NULL) {

enter code here
    if(!$accessToken) return;

    $graphUrl = 'https://graph.facebook.com/oauth/access_token?client_id='.$facebookAppId.
                '&client_secret='.$facebookSecret.
                '&grant_type=fb_exchange_token&fb_exchange_token='.$accessToken;
    $accessToken = @file_get_contents($graphUrl);
    parse_str($accessToken); //get the access_token param in the string and would be named $access_token
    if(!$access_token) $access_token = $accessToken; //if cannot be extended then just return the access token with 2 hours expiry
    return $access_token;
}
于 2012-07-06T00:32:47.403 に答える
0
use Facebook\FacebookSession;
use Facebook\GraphSessionInfo;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

    FacebookSession::setDefaultApplication('YOURAPPID', 'SECRET');

    $user_accessToken = $_COOKIE['access_token_facebook']

    $session = new FacebookSession($user_accessToken);

    try {
        $session->validate();
    } catch (FacebookRequestException $ex) {
        // When Facebook returns an error
        echo $ex->getMessage();
    } catch (\Exception $ex) {
        // When validation fails or other local issues
        echo $ex->getMessage();
    }
    if ($session) {
        // Exchange token for long token
        $longToken = $session->getExchangeToken();
        // ... your other stuff
    }

参照: https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens https://developers.facebook.com/docs/facebook-login/access-tokens#extending

于 2015-04-22T05:42:28.663 に答える