56

API (C#) 経由で Facebook ページに投稿できましたが、ページの管理者がログアウトすると、次のエラーが発生します。

「(OAuthException - #190) アクセス トークンの検証中にエラーが発生しました: ユーザーがログアウトしたため、セッションは無効です。」

期限切れのないアクセス トークンを生成するにはどうすればよいですか?

Facebook ログイン ダイアログを開かないソリューションが必要です。

4

12 に答える 12

31

次の手順に従って、コーディングせずに無期限のアクセス トークンを生成できます。

  1. グラフ エクスプローラーを開きます: https://developers.facebook.com/tools/explorer/
  2. 右隅のドロップダウンからアプリケーションを選択します。
  3. 「トークンを取得」ドロップダウンからファンページを選択します。
  4. 送信ボタンをクリックしてトークンを生成します。
  5. [フィールドを検索] の左側から access_token を入力し、もう一度 [送信] をクリックします。このトークンをメイン ウィンドウからコピーします。
  6. https://developers.facebook.com/tools/debug/accesstokenを開き、ここにトークンを貼り付けます。「デバッグ」をクリックします。
  7. 「アクセストークンの拡張」ボタンをクリックします。これにより、無期限のトークンが生成されます。
于 2016-02-18T12:31:30.593 に答える
4
  1. お持ちでない場合はアプリを作成してください - https://developers.facebook.com/
  2. Graph Explorer で有効期間の短いユーザー アクセス トークンを作成します - https://developers.facebook.com/tools/explorer/

上記で作成したアプリを選択し、[ドロップダウンでユーザー アクセス トークンを取得] を選択します。</p>

ユーザー アクセス トークンのポップアップで、トークンのアクセス許可を選択できます。有効期限のないページ アクセス トークンの場合は、[ページの公開] と [ページの管理] を選択する必要があります。

  1. 有効期間の長いユーザー アクセス トークンを作成する

https://developers.facebook.com/tools/accesstoken/にアクセスします。そこには、所有しているすべてのアプリの有効期間が短いユーザー アクセス トークンとアプリ アクセス トークンがあります。

上記で作成したアプリのユーザーアクセストークンのデバッグオプションを押します。これにより、デバッグ ツールが表示されます。有効期間が短いユーザー アクセス トークンのすべての情報を確認できる場所。

下部には、この短期間のユーザー アクセス トークンに対して長期間 (60 日) のユーザー アクセス トークンを生成するオプションがあります。[アクセス トークンの拡張] を選択して、有効期間の長いユーザー アクセス トークンを生成します。</p>

  1. 期限切れのないページ アクセス トークンを作成する

を。グラフ エクスプローラー ( https://developers.facebook.com/tools/explorer/)に移動します。

b. 前の手順で生成された有効期間の長いユーザー アクセス トークンを [アクセス トークン] フィールドに貼り付けます。

c. 「/me?fields=access_token」API にアクセスします。これにより、ページ アクセス トークンとそれに関連するページが生成されます。これらのページ アクセス トークンは期限切れになりません (ユーザーがパスワードを変更するか、ユーザーがアプリを取り消すまで)

  1. 有効期限のないページ アクセス トークンを確認する

を。https://developers.facebook.com/tools/debug/accesstoken/にアクセスしてください

b. 上記の手順で取得したページ アクセス トークンを「アクセス トークン」フィールドに追加し、デバッグします。

あなたはNeverとしてexpiresを取得します

少し変更してここにあります: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1

于 2018-06-14T08:34:35.860 に答える
2

FB.login() で、manage_pages、pages_show_list などのスコープ パーミッションでユーザー アクセス トークンを取得する必要があります。次に、FB.api("/{user-app-id}/accounts", fields: ...) を実行して、access_token を含むそれぞれの情報を含むページのリストを取得します。ここでは、有効期間が短いトークンを取得しますが、このトークンを使用すると、有効期限を「なし」に延長できます。

FB.login(function (response){
  if(response.status!=="connected"){
    return;
  }        
  FB.api('/'+USER_APP_ID+'/accounts',{fields: 'id, name, access_token,category, picture'}, 
   function(d){
    console.log(d) // Here you get access_token (short-lived-token)
  });
},{scope: 'manage_pages, pages_show_list', auth_type: 'rerequest'});

最後のアクセス トークンとサーバー側から、ページを管理するためのアクセス許可を取得するために使用するアプリのアプリ ID とアプリ シークレットを使用して、API Graph を呼び出します。

GET /oauth/access_token?  
grant_type=fb_exchange_token&           
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token} 

応答では、有効期限が「Never」のアクセス トークンが返されます。

参照: API Graph アカウント有効期限、アクセス トークンの拡張

于 2018-03-29T23:56:08.707 に答える
1

4.xFacebook SDKを使用している場合、以下の方法がうまくいきました。

  1. ここに記載されている方法を使用して、初めて一時ユーザー アクセス トークンを作成します。
  2. 今!PHP SDK 4.xを使用して、このトークンを長期トークンに変換します。私にとってはうまくいったので、次のコードを使用してください:

//Class for Generating the Long Lived Token

namespace App\Lib;

use Facebook\FacebookApp;
use Facebook\FacebookClient;
use Facebook\Authentication\OAuth2Client;

class FacebookLongLivedTokenGenerator
{
    public $longLivedTokenGenerated = false;

    public function generateFacebookLongLivedToken($appId, $appSecret, $oldToken)
    {
        //request new access token
        $oauth2Fb = new OAuth2Client(new FacebookApp($appId, $appSecret), new FacebookClient());
        $longLivedToken = $oauth2Fb->getLongLivedAccessToken($oldToken);
        if ($longLivedToken) {
            $this->longLivedTokenGenerated = true;
            $this->userAccessToken = $longLivedToken;
        }
        return trim($this->userAccessToken);
    }
}

上記のクラスは次の方法で使用できます。

$longToken = new FacebookLongLivedTokenGenerator();
echo $longToken->generateFacebookLongLivedToken($appId, $appSecret, $oldUserAccessToken);
于 2016-01-22T17:03:41.663 に答える
0

この Makefile は 2015-10-29 の時点で機能します。手順 2 と 3 では 2 か月のトークンのみが提供されますが、最後の手順で提供されたページ アクセス トークンは、デバッガーで "Expires: Never" と表示されます。この回答は、他のいくつかの作業を利用しており、好みのプログラミング言語に関係なく、開発者にとって物事を簡素化することを期待して提供されています。

これを使用する前に、次のように既存のページ ID、アプリ ID、アプリ シークレットをこの順序で ~/.netrc ファイルに入れる必要があります。machine graph.facebook.com login 123456 account 234567 password 345678

また、これを使用する前に、w3m で Facebook にログインし、[ログイン状態を維持する] をクリックします。

MACHINE := graph.facebook.com
PAGE_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$4}' $(HOME)/.netrc)
APP_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$6}' $(HOME)/.netrc)
APP_SECRET := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$8}' $(HOME)/.netrc)
PERMISSIONS := manage_pages,publish_actions,publish_pages
FB := https://www.facebook.com
GRAPH := https://$(MACHINE)
CODE ?=
TOKEN ?=
TWOMONTHTOKEN ?=
BROWSER ?= w3m -dump
REDIRECT := http://jc.unternet.net/test.cgi
CLIENT_SIDE := $(FB)/dialog/oauth?client_id=$(APP_ID)&redirect_uri=$(REDIRECT)
CLIENT_SIDE := $(CLIENT_SIDE)&scope=$(PERMISSIONS)&response_type=code
SERVER_SIDE := $(GRAPH)/oauth/access_token?client_id=$(APP_ID)
SERVER_SIDE := $(SERVER_SIDE)&redirect_uri=$(REDIRECT)
SERVER_SIDE := $(SERVER_SIDE)&client_secret=$(APP_SECRET)&code=$(CODE)
LONG_LIVED := $(GRAPH)/oauth/access_token?client_id=$(APP_ID)
LONG_LIVED := $(LONG_LIVED)&client_secret=$(APP_SECRET)
LONG_LIVED := $(LONG_LIVED)&grant_type=fb_exchange_token
LONG_LIVED := $(LONG_LIVED)&fb_exchange_token=$(TOKEN)
ACCOUNTS := $(GRAPH)/me/accounts?access_token=$(TWOMONTHTOKEN)
export
env:
    env
    @echo Usage: make code
    @echo '        ' make CODE=codefrompreviousstep token
    @echo '        ' make TOKEN=tokenfrompreviousstep longterm
    @echo '        ' make TWOMONTHTOKEN=tokenfrompreviousstep accounts
    @echo Then edit '$$HOME/.netrc' replacing password with page token
code:
    $(BROWSER) "$(CLIENT_SIDE)"
token:
    $(BROWSER) "$(SERVER_SIDE)"
longterm:
    $(BROWSER) "$(LONG_LIVED)"
accounts:
    $(BROWSER) $(ACCOUNTS)

多くの場合、最初のステップは w3m で失敗します。その場合は、firefox などの別のブラウザをインストールしてください。ssh -Xスクリプトがリモートでホストされている場合はサーバーに。代わりに使用make BROWSER=firefox codeします。次の手順は、示されているように w3m で機能するはずです。

注: この Makefile をカット アンド ペーストする場合は、4 つのスペースのインデントを適切なタブに置き換えてください。

于 2015-10-29T22:29:59.500 に答える