2

私は次のコードを持っています(facebook-sdk appengineの例から取得):

class BaseHandler(webapp2.RequestHandler):
    @property
    def current_user(self):
        if not hasattr(self, "_current_user"):
            self._current_user = None
            cookie = facebook.get_user_from_cookie(
                self.request.cookies, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET)
            if cookie:
                user = User.get_by_key_name(cookie["uid"])
                if not user:
                    graph = facebook.GraphAPI(cookie["access_token"])
                    profile = graph.get_object("me")
                    user = User(key_name=str(profile["id"]), ...)
                    user.put()
                elif user.access_token != cookie["access_token"]:
                    user.access_token = cookie["access_token"]
                    user.put()
                self._current_user = user
        return self._current_user

問題#23で説明されている正確な問題があります

プロジェクトに含まれているGoogleAppEngineの例では、リクエストごとにget_user_from_cookieが呼び出され、Facebookにリクエストが送信されます。この例では、返されたアクセストークンをキャッシュして、これが発生しないようにする必要があります。

どうすればこれを解決できますか?私が抱えている懸念の1つは、それらをセッションに保存する場合、アクセストークンが有効であることをどのように知ることができるかということです。

4

1 に答える 1

1

get_user_from_cookieはアクセストークンを取得するためにFacebookを呼び出します。アクセストークンは、有効期限が切れている間(memacheを使用して)キャッシュできます(アクセストークンについてFacebookを呼び出すと有効期限も取得します)。

アクセストークンを取得するための次の手順は次のとおりです。

  1. クラス(ハンドラー)レベルでキャッシュされているかどうかを確認します。
  2. memacheにキャッシュされているかどうかを確認します。
  3. フェイスブックから回復し、それをキャッシュします(トークンのデュアーションのために)
  4. 有効期限が原因でアクセストークンが失敗した場合は、アクセストークンを使用して取得(およびキャッシュ)します。
于 2012-06-06T16:26:45.467 に答える