0

私はYiiをフレームワークとして使用していますが、それはうまくいかないと思います。

この時点で、PHP SDKを使用してユーザーからアカウント情報を取得します。これは、ユーザーが最初にログインしている間は正常に機能します。しかし、1〜2時間後にアクセストークンの有効期限が切れ、エラーが発生します(これは奇妙なことではありません)。

しかし、ここで私は行き詰まり、2つの解決策を考えることができますが、どちらもそれらを行う方法がわかりません。まず、私のコードのいくつかを紹介しましょう。

私のアプリにログインするには、ユーザーはFacebookLogin()アクションに送信されます:

public function actionFacebookLogin()
{
    $my_url = 'http://***.***.nl/app/facebook-popup.php';
    $permissions = 'read_insights, publish_actions, manage_pages, email';
    $loginUrl = Yii::app()->facebook->getLoginUrl(array('scope' => $permissions, 'display' => 'popup', 'redirect_uri' => $my_url));
    echo '<script> window.location="'.$loginUrl.'"</script>';
}

ユーザーが適切な権限を付与した後、ユーザーはLogin()アクションに送信されます。

public function actionLogin() {
    $facebookID = Yii::app()->facebook->getUser();  
    $accessToken = Yii::app()->facebook->getAccessToken();
}

(残りのログインアクションは重要ではありません。)

この時点で、この->getAccessToken()関数は短いライフタイムで適切なaccess_tokenを提供します。ユーザーが私のページで1時間または2時間以上経過していない限り、これは問題ありません。必要な権限を付与する新しいaccess_token。

それで、これを解決するために、私はこれを使用するための適切なアプローチを見つけることができない2つの解決策を考えました。

最初に最も簡単なもの。Graph API Explorerに移動してaccess_tokenを使用すると、アプリから情報を取得できますが、そのaccess_tokenをデバッグしようとすると、access_tokenに有効期限があることが示されます。しかし、同じGraph API Explorerを使用して、それ自体でaccess_tokenを生成させると、まったく有効期限が切れないaccess_tokenを取得します。

Graph API Explorerでの処理に関する最新情報を求められたので、 API Explorer に移動して、アプリをWebアプリに変更します。次に、通常のaccess_tokenが自動的に入力されます。「デバッグ」ボタンを押すと、このaccess_tokenに有効期限があると表示されます。次にエクスプローラーに戻り、[アクセストークンを取得]ボタンを押すと、別のトークンが表示されます。次にもう一度「デバッグ」ボタンを押すと、このaccess_tokenには有効期限がないことが示されます。これが使えたらいいですね。

したがって、私の最初の解決策は、最後のaccess_token(可能な場合)を取得してデータベースに保存することです。次に、必要に応じてFacebookPHPSDK->setAccessToken()関数を使用します。でもどうやって?手がかりがない!

私が考えた2番目の解決策。init()また、有効なaccess_tokenを取得した場合はすべてのアクションをチェックし、取得しなかった場合は新しいアクションを取得したり、期限切れの現在のアクションを更新したりする関数を作成することもできます。これは、最初のソリューションよりもサーバーの負荷が高くなります。最初のソリューションと同じように、これを実現する方法がわかりません。

主な問題は、Facebookのドキュメントを理解するのが少し難しいことだと思います。どこから始めればよいのかわかりません。

どんな入力でも非常に応用されます!

4

1 に答える 1

0

https://developers.facebook.com/roadmap/offline-access-removal/で説明されているように、アクセス トークンの有効期限を延長することができます。

または、JS SDK を埋め込むこともできます。これは、前のトークンの有効期限が切れた場合に、すべてのページ呼び出しで新しい短命のアクセス トークンを取得します。(そして、Cookie を介して PHP SDK と共有します。)

于 2013-02-12T12:29:52.193 に答える