API (C#) 経由で Facebook ページに投稿できましたが、ページの管理者がログアウトすると、次のエラーが発生します。
「(OAuthException - #190) アクセス トークンの検証中にエラーが発生しました: ユーザーがログアウトしたため、セッションは無効です。」
期限切れのないアクセス トークンを生成するにはどうすればよいですか?
Facebook ログイン ダイアログを開かないソリューションが必要です。
API (C#) 経由で Facebook ページに投稿できましたが、ページの管理者がログアウトすると、次のエラーが発生します。
「(OAuthException - #190) アクセス トークンの検証中にエラーが発生しました: ユーザーがログアウトしたため、セッションは無効です。」
期限切れのないアクセス トークンを生成するにはどうすればよいですか?
Facebook ログイン ダイアログを開かないソリューションが必要です。
次の手順に従って、コーディングせずに無期限のアクセス トークンを生成できます。
上記で作成したアプリを選択し、[ドロップダウンでユーザー アクセス トークンを取得] を選択します。</p>
ユーザー アクセス トークンのポップアップで、トークンのアクセス許可を選択できます。有効期限のないページ アクセス トークンの場合は、[ページの公開] と [ページの管理] を選択する必要があります。
https://developers.facebook.com/tools/accesstoken/にアクセスします。そこには、所有しているすべてのアプリの有効期間が短いユーザー アクセス トークンとアプリ アクセス トークンがあります。
上記で作成したアプリのユーザーアクセストークンのデバッグオプションを押します。これにより、デバッグ ツールが表示されます。有効期間が短いユーザー アクセス トークンのすべての情報を確認できる場所。
下部には、この短期間のユーザー アクセス トークンに対して長期間 (60 日) のユーザー アクセス トークンを生成するオプションがあります。[アクセス トークンの拡張] を選択して、有効期間の長いユーザー アクセス トークンを生成します。</p>
を。グラフ エクスプローラー ( https://developers.facebook.com/tools/explorer/)に移動します。
b. 前の手順で生成された有効期間の長いユーザー アクセス トークンを [アクセス トークン] フィールドに貼り付けます。
c. 「/me?fields=access_token」API にアクセスします。これにより、ページ アクセス トークンとそれに関連するページが生成されます。これらのページ アクセス トークンは期限切れになりません (ユーザーがパスワードを変更するか、ユーザーがアプリを取り消すまで)
を。https://developers.facebook.com/tools/debug/accesstoken/にアクセスしてください
b. 上記の手順で取得したページ アクセス トークンを「アクセス トークン」フィールドに追加し、デバッグします。
あなたはNeverとしてexpiresを取得します
少し変更してここにあります: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1
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」のアクセス トークンが返されます。
4.x
Facebook SDKを使用している場合、以下の方法がうまくいきました。
//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);
この 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 つのスペースのインデントを適切なタブに置き換えてください。