1

Facebookのサポートを可能にするサーバーソフトウェアのモジュールを作成しています。問題はコールバックURLにあります。1つのクライアントが認証プロセスを開始した場合、別のクライアントが同時に、または最初のユーザーが終了する前にプロセスを開始します。どのユーザーが最初に終了したかを確認するにはどうすればよいですか?

取得しているクライアントのコールバックを確認する方法が必要です。1つの解決策は、最初のレジスタが終了するまで他のレジスタをロックすることですが、私はそれをしたくありません。別の方法はありますか?コールバックの最後に含めることを考え?client=clientidましたが、FacebookではFacebookのアプリで指定された正確なURLしか許可されていないと聞きました。

UPDATE コールバックにclient="clientid"を追加しても機能しませんでした。他のアイデアはありますか?

4

3 に答える 3

2

さらに検索した後、facebook はパラメーター state を許可すると考えました。(@jacob https://stackoverflow.com/a/6470835/1104307に感謝)

それで、私はただ ?state=clientId を実行しました。

スクライブを使用している場合、コードは次のとおりです。

service.getAuthorizationUrl(null) + "&state=" + clientId;
于 2012-11-19T15:12:06.297 に答える
1

client=clientID のように GET パラメータを追加しても問題ないと思います。Facebook は、指定した URL にリダイレクトし、REQUEST パラメータを使用して、誰がリクエストを完了したかを確認できます。URL をhttp://yoursite.comとして指定し、 http://some-sub-domain.yoursite.comまたはまったく別の場所にリダイレクトを渡すと、問題が発生します。

于 2012-11-18T17:38:05.037 に答える
1

サーバー側フローを使用している場合、oauth 2 フローは次のようになります。

  1. ユーザーを Facebook にリダイレクトする
  2. 次に、facebook は指定されたコールバックにユーザーをリダイレクトします
  3. サーバーはcurlなどを使用してアクセストークンを取得します
  4. サーバーはさらにcurlを実行して、おそらくより多くのユーザーデータを取得するか、ユーザーのデータを更新します

ステップ 1 でセッション Cookie を設定し、同時にこのセッション ID をサーバーに保存することをお勧めします。セッション Cookie はステップ 2 のコールバック URL に自動的に送信され、この方法でデータベース内のセッションを識別できます。

これは、すべてのサービス プロバイダー (google、twitter、linkedin など) で機能し、セッションの継続性を維持するための推奨される方法です。

于 2012-11-19T06:28:37.520 に答える