1

WebサイトでPHPSDKを使用しています。登録フォームとログインフォームを作成しました。

Facebookのログインリンクが生成され、ユーザーはアプリをクリックして承認します。それらは私のサイトにリダイレクトされ、アクセストークンを持っています。

$ this-> facebook-> api('/ me /');などのAPI呼び出しを使用できます。呼び出しをtryステートメント内に置き、例外をキャッチします。

それは完璧に動作します。

問題は、APIがすべて完了できず、例外がキャッチされるため、アクセストークンがランダムに期限切れになることです。これがなぜなのかはわかりませんが、私がやりたいのは、アクセストークンをシームレスに更新することです。つまり、新しいトークンを取得して、サイトでのユーザーセッションをシームレスに続行します。

したがって、私が行うことは、セッションでユーザーの場所を保存し、catchステートメントでユーザーをFacebookログインページにリダイレクトしてから、ユーザーに正常に再ログインすると、元の場所にリダイレクトします。

これは機能しますが、問題があります。これを持っている:

            try
        {
            $me = $CI->facebook->api('/me');
        }
            catch(FacebookApiException $e) 
        {               
    //redirect to fb login lin
        }

すべてのページで、サイト上のすべてのページのページ読み込み時間が基本的に2倍になります。FacebookPHPSDKは本質的に低速です。

1秒のページ読み込みの代わりに、2〜3秒かかります。私はそれをベンチマークしました、そしてそれはこのtry/catchのためです。

私に何ができる?ユーザーに多大な読み込み時間のコストをかけずに、許可されたユーザーのアクセスキーを維持/更新するにはどうすればよいですか?

4

1 に答える 1

2

編集:私が提案しているソリューションでは、PHP を使用した認証に直接OAuth 2.0呼び出しを使用し、残りの Facebook API 呼び出しにはそれ以降の PHP SDK を使用します。

  1. Facebook Developer Documentationaccess_tokenの手順に従って、最初に を取得します。
  2. ステップ 6 では、access_token有効期間が 90 日間延長されます。
  3. 拡張された を取得したら、Facebook::setAccessTokenaccess_tokenを呼び出して PHP SDK に同じものを使用させることができます。
  4. 他のページから API 呼び出しを行うためにFacebookオブジェクトを保存します。$_SESSION

access_tokenさらに、この拡張を永続的に (データベースに)保存することもできます。これにより、ログインプロセスのための Facebook 通信が完全になくなります。access_tokenただし、 (明らかな理由で) を保護するために必要なセキュリティ上の予防措置を講じていること、およびプライバシー ポリシーに同じことが記載されていることを確認してください。

于 2013-01-06T17:17:27.073 に答える