2011-07-15 5 views
13

私はthis referenceから働いており、ユーザーがFacebook経由で自分のサイトにログインできるようにOAuthプロトコルを実装しようとしています。しかし、Facebookのドキュメントはかなりひどく、いくつかの重要な部分では不明です。期限切れのFacebookアクセストークンはどのように更新しますか?

  1. ユーザ認証(https://facebook.com/dialog/oauth?client_id=...&redirect_uri=...にユーザーをリダイレクトし、redirect_uriページがcodeバックと呼ばれることを期待する):

    これは、認証が3つの手順を取ることを言います。よく働く!

  2. アプリの承認(Facebookなどで処理)。よく働く!

  3. アプリの認証(コールバック]ページで、あなたが得るとhttps://graph.facebook.com/oauth/access_token?client_id=...&redirect_uri=...&client_secret=...&code=...を呼び出すcodeをつかむ。レスポンスのボディは、私たちがものを行う必要がありaccess_token含まれます)

は私が理解しaccess_tokenを持ちます、私はAPIなどを呼び出すことができます。しかし、期限が切れるとどうなりますか?私は新しいものを手に入れることができましたが、この時点では後で多くのHTTP要求が発生し、最初に取得したのはです。 codeaccess_tokenの横に並べて保存する必要がありますか?または、ユーザーに再度ログインするように伝える必要があるので、新しいcodeを取得して新しいaccess_tokenを取得しますか?

ここで重要な部分がありませんか? offline_accessトークンは必要ありません。ユーザーの操作に応じてデータをポーリングするためです。

答えて

25

access_tokenが期限切れになると、ユーザーはFacebookによって「ログアウト」したように見えます。あなたのアプリは最初と同じプロセスを経ますが、ユーザーはそうではありません。

ユーザーがあなたのアプリへのアクセスを取り消しておらず、ユーザーがその時点でFacebookにログインしている場合、ユーザーが何も操作することなく、App Authorizationプロセスが自動的に処理します。新しいaccess_token

ユーザーがあなたのアプリへのアクセスを取り消していないが、Facebookにログインしていない場合は、App AuthorizationステップでFacebookのログイン情報が提示されます。彼らはあなたのアプリのIDがそのユーザーによって承認されていることをFacebookが知っているので、彼らは再びあなたのアプリの許可を与えるよう求められません。

最後に、ユーザーがアクセスを取り消した場合、元のアプリケーションの承認要求が表示され、元のフローに従います。

本質的には、access_tokenは揮発性であるとみなし、保存するのを邪魔するのではなく、常にユーザーのログインプロセスの一部として受け取ったaccess_tokenを使用してください。これは常に舞台裏で起こっています。彼らはFacebookからログアウトしたり、アプリケーションへのアクセスを取り消したりします。

これは、TwitterのOAuthと異なり、保存して再利用することができます。

+0

だから、すべてのページの読み込み時に再認証する必要があると言っていますか?私のサーバーへのリクエスト数を倍増させませんか? –

+1

access_tokenが期限切れになったときに再認証する必要があります。 access_tokenを取得した応答には、access_tokenが期限切れになるまでの秒数であるexpiresパラメータも含まれています。あなたはトークンが発行されたときを知っているので、秒数に基づいて期限が切れているかどうかを確認するだけです。それがあれば、新しいものを入手してください。そうでなければ、それを使い続けてください。 – Owen

+0

ああ、大丈夫。幸いにも、これは私が以前に来た結論です。トークンの有効期限が切れたときに、OAuthプロシージャの先頭にリダイレクトを挿入するだけです。 –

5

あなたの質問にリンクされ、Facebookのドキュメントから:

トークンの有効期限が切れた後、ユーザーがすでに持っている場合が に上記の再実行の手順は、新しいコードやaccess_tokenはを生成する必要があります あなたのアプリを承認した場合、再びそうするよう促されることはありません。

access_tokenはあなたが同じ手順を遡ることにより、新しいものを取得する必要があります有効期限が切れます。ユーザーは再度ログインする必要があり、新しいcodeを取得し、次に新しいaccess_tokenを取得する必要があります。

関連する問題