2

Google カレンダーの承認にOAuth 2.0を使用するGoogle App Engine アプリケーションでこれを実行しようとしています(Google Apps ドメインのユーザーに制限されています)。

  1. ユーザーがまだ自分のカレンダーへのアクセスをアプリに承認していない場合は、[このアプリを Google Apps アカウントで承認する] ボタンを表示します。
  2. ユーザーがそのボタンを押すと、新しいウィンドウが開き、認証プロセスが開始されます (URL はhttps://accounts.google.com/o/oauth2/auth?state=CALLER_URL&redirect_uri=CALLBACK_URL&response_type=code&client_id=CLIENT_ID&scope=の形式にあります)。 https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&access_type=offline )
  3. ユーザーがアプリに自分のカレンダーへのアクセスを許可すると、このウィンドウが閉じられ、呼び出し元のウィンドウがリロードされてアプリが表示されます。

ステップ 1は非常に簡単です。ステップ2、ちょっと。その URL を新しいウィンドウで開くことはできますが、残りのプロセスはその新しいウィンドウで行われます。つまり、ユーザーがアプリを承認すると、URL はコールバック uri にフォールバックしますが、呼び出し元のウィンドウではなく同じウィンドウにフォールバックします。

これを行う方法はありますか?以上のサイトで見ました。ボタンを押すと、新しいウィンドウが開き、発信者アプリがデータ (Twitter アカウント、Facebook ウォール、Google 連絡先など) にアクセスするための承認が与えられます。その後、そのウィンドウが閉じられ、発信者ウィンドウが必要な情報と共に再読み込みされます。認証トークンと作業準備完了

4

1 に答える 1

3

必ず子ウィンドウにポストバックする必要があります。親ウィンドウと子ウィンドウは通信できるため、これは問題ではありません。たとえば、次のようになります。

  1. 一部の JS は子ウィンドウを開き、その場所を Google 認証ページに設定します。
  2. ユーザーがダイアログを受け入れると、子ウィンドウがコールバック URL に転送されます
  3. サーバーは、転送された URL から取得したトークン データを保存します (リクエストがどのウィンドウから来たのかはわかりません)。
  4. サーバーは、子ウィンドウに読み込まれるページを返します。
  5. そのページは空白ですが、下のページに警告してウィンドウを閉じる JavaScript が含まれています

たとえば、JavaScript は次のようになります。

window.parent.location.reload();
window.close();
于 2013-01-23T13:01:36.177 に答える