Facebook OAuth2統合用の動的リダイレクトURLが必要です。たとえば、FacebookアプリでリダイレクトURLがこれである場合:
http://www.mysite.com/oauth_callback?foo=bar
特定のリクエストのリダイレクトURLを次のようにしたいので、サーバー上で認証コードを処理する方法に関するコンテキストがあります。
http://www.mysite.com/oauth_callback?foo=bar&user=6234
承認ダイアログが送信された後にリダイレクトが呼び出され、認証コードが返されますが、アクセストークンを取得しようとすると、FacebookからOAuthExceptionエラーが返されます。私の要求は次のようになります(わかりやすくするために改行が追加されています)。
https://graph.facebook.com/oauth/access_token ?client_id = MY_CLIENT_ID &redirect_uri = http%3A%2F%2Fwww.mysite.com%2Foauth_callback%3Ffoo% 3Dbar%26user%3D6234 &client_secret = MY_SECRET &code = RECEIVED_CODE
私のパラメーターはすべてURLエンコードされており、コードは有効に見えるため、問題のパラメーターは私のredirect_uriであると推測されます。 redirect_uri
を次のすべてに設定しようとしましたが、役に立ちませんでした。
code
パラメーターを引いたものカスタムリダイレクトURIパラメーターはサポートされていますか?その場合、それらを正しく指定していますか?そうでない場合、Cookieの設定を強制されますか、それともWebサイトにコンテキストを提供するためのより良いパターンがありますか
答えを見つけました。リダイレクトURLにパラメーターを追加するのではなく、state
パラメーターをhttps://www.facebook.com/dialog/oauth
へのリクエストに追加できます。
https://www.facebook.com/dialog/oauth ?client_id = MY_CLIENT_ID &scope = MY_SCOPE &redirect_uri = http%3A%2F%2Fwww。 mysite.com%2Foauth_callback%3Ffoo%3Dbar &state = 6234
その状態パラメーターは、コールバックURLに渡されます。
何らかの理由で、ジェイコブが提案したオプションを使用できない場合は、渡す前にrlencoderedirect_uri
パラメーターを使用すると、完全な場合でも機能しますfoo=bar&morefoo=morebar
のようなクエリ文字列。
このチュートリアル に従って、API v2.9に対してFacebookログインワークフローを実装しようとしていました。上記のソリューションを試しました。 Manuelの答えは一種の正しいものですが、私が観察したのはURLエンコードが必要ないということです。さらに、1つのパラメーターのみを渡すことができます。最初のクエリパラメータのみが考慮され、残りは無視されます。以下に例を示します。
https://www.facebook.com/v2.9/dialog/oauth?client_id={app-id}&redirect_uri=http://{url}/login-redirect?myExtraParameter={some-value}
を介してコードをリクエストします
URLのコールバックを取得します。 http://{url}/login-redirect?code={code-from-facebook}&myExtraParameter={value-passed-in-step-1}
のようになります。 facebookはmyExtraParameter
でコールバックを行うことに注意してください。コールバックURLからmyExtraParameter
の値を抽出できます。
その後、https://graph.facebook.com/v2.9/oauth/access_token?client_id={app-id}&client_secret={app-secret}&code={code-from-facebook}&redirect_uri=http://{url}/login-redirect?myExtraParameter={value-extracted-in-step-2}
でアクセストークンをリクエストできます
最初のクエリパラメータの後に手順1で渡された追加のパラメータは無視されます。また、クエリパラメータに無効な文字を含めないでください(詳細については this を参照してください)。