77

FacebookOAuth2統合用の動的リダイレクト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次のすべてに設定しようとしましたが、役に立ちませんでした。

  1. 私のサイトへのリクエストの実際のURL
  2. 私のサイトへのリクエストのURLからcodeパラメータを差し引いたもの
  3. Facebookアプリケーションの構成で指定されたURL

カスタムリダイレクトURIパラメーターはサポートされていますか?もしそうなら、私はそれらを正しく指定していますか?そうでない場合、Cookieを設定する必要がありますか、それともWebサイトにコンテキストを提供するためのより良いパターンがありますか?

4

6 に答える 6

104

私は答えを見つけました。リダイレクト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に渡されます。

于 2011-06-24T16:28:33.137 に答える
12

何らかの理由で、私の場合のようにJacobが提案したオプションを使用できない場合は、パラメーターを渡す前にurlencodeすることができredirect_uri、そのような完全なクエリ文字列を使用foo=bar&morefoo=morebarしても機能します。

于 2012-04-27T09:07:46.573 に答える
4

このチュートリアルに従って、APIv2.9に対してFacebookログインワークフローを実装しようとしました。上記の解決策を試しました。マヌエルの答えはある程度正しいですが、私が観察したのは、URLエンコードは必要ないということです。さらに、渡すことができるパラメーターは1つだけです。最初のクエリパラメータのみが考慮され、残りは無視されます。これが例です、

  1. 経由でコードをリクエストするhttps://www.facebook.com/v2.9/dialog/oauth?client_id={app-id}&redirect_uri=http://{url}/login-redirect?myExtraParameter={some-value}

  2. URLのコールバックを受け取ります。のようになりますhttp://{url}/login-redirect?code={code-from-facebook}&myExtraParameter={value-passed-in-step-1}。Facebookは。でコールバックを行うことに注意してくださいmyExtraParametermyExtraParameterコールバックURLからの値を抽出できます。

  3. 次に、でアクセストークンをリクエストできます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で渡された追加のパラメータは無視されます。また、クエリパラメータに無効な文字を含めないようにしてください(詳細については、これを参照してください)。

于 2017-07-11T04:58:58.293 に答える
-1

oAuthプロバイダーなどごと/oauth/facebookに一意のコールバックを指定することをお勧めします。/oauth/twitter

同じファイルがすべてのoAuthリクエストに応答するようにしたい場合は、それを個々のファイルに含めるか、.htaccessリダイレクトなどを使用してサーバー上の同じファイルを呼び出すパスを設定します。/oauth/*>oauth_callback.ext

于 2016-06-13T04:22:24.380 に答える
-1

ログインヘルパーを使用して、カスタムstateパラメータを設定する必要があります。

use Facebook\Facebook;
use Illuminate\Support\Str;

$fb = new Facebook([
    'app_id' => env('FB_APP_ID'),
    'app_secret' => env('FB_APP_SECRET'),
    'default_graph_version' => env('FB_APP_VER'),
]);

$helper = $fb->getRedirectLoginHelper();

$permissions = [
    'public_profile',
    'user_link',
    'email',
    'read_insights',
    'pages_show_list',
    'instagram_basic',
    'instagram_manage_insights',
    'manage_pages'
];

$random = Str::random(20);

$OAuth2Client = $fb->getOAuth2Client();

$redirectLoginHelper = $fb->getRedirectLoginHelper();

$persistentDataHandler = $redirectLoginHelper->getPersistentDataHandler();

$persistentDataHandler->set('state', $random);

$loginUrl = $OAuth2Client->getAuthorizationUrl(
        url('/') . '/auth/facebook',
        $random,
        $permissions
    );
于 2020-04-02T04:46:10.000 に答える
-1

ねえ、あなたが公式のfacebook php skdを使用しているなら、あなたはstateこのようにカスタムパラメータを設定することができます

$helper = $fb->getRedirectLoginHelper();
$helper->getPersistentDataHandler()->set('state',"any_data");
$url = $helper->getLoginUrl($callback_url, $fb_permissions_array);
于 2020-11-18T16:16:23.967 に答える