Flash UI からnavigateToURL()でOAuth認証
全面Flashで作られたガジェットでの、OAuth認証プロセスで嵌った点をメモ。
Opera、Safari、Firefox、IEのそれぞれで、Javascriptまでを駆使するPopupブロックの回避法は、それぞれ違ったり、なかったり(?)するみたいということで、Flashのマウスイベント内に置いたnavigateToURL()で、認証画面を開く。
そのためのURL+パラメータは、gadgets.io.makeRequestの戻り値のres.oauthApprovalUrlから得ておく。こんな値。
https://www.google.com/accounts/OAuthAuthorizeToken?
oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback&
oauth_token=*******
この戻り値を単純にnavigateToURL( res.oauthApprovalUrl)と入れてやると新しいタブ(ウィンドウ)にhttps://www.google.com/accounts/OAuthAuthorizeTokenのページが開き、認証が表示される。
認証がすむとoauth_callback=のURL、http://oauth.gmodules.com/gadgets/oauthcallbackに飛んで、すぐにWindowは閉じられる。
サンプルに使われているpopup.jsを使用していると、ポップアップWindowが閉じられたのを検出してonClose:に設定されたfunctionが実行される。サンプルでは再度リクエストを実行している。
ここで、FlashからnavigateToURL()した場合、新しく作られたWindowのCloseを検出することができない。
コールバック(http://oauth.gmodules.com/gadgets/oauthcallback)はどうなっているのかと見てみると、以下の短い内容でした。
このhtmlを自前のガジェットで置き換えてやるか、gadgets.io.oauthReceivedCallbackUrl_の内容の変化を監視してやると、認証画面が終了したことを知ることができる。
実はまだためしていない。。。
またOAuth周りののテストのために、OAuthを一旦解除するのがとてもめんどい。
http://shindig.apache.org/shindig-1.1.x/shindig-features/jsdoc/symbols/src/_home_lindner_projects_shindig_trunk_target_checkout_features_src_main_javascript_features_core.io_io.js.html
Opera、Safari、Firefox、IEのそれぞれで、Javascriptまでを駆使するPopupブロックの回避法は、それぞれ違ったり、なかったり(?)するみたいということで、Flashのマウスイベント内に置いたnavigateToURL()で、認証画面を開く。
そのためのURL+パラメータは、gadgets.io.makeRequestの戻り値のres.oauthApprovalUrlから得ておく。こんな値。
https://www.google.com/accounts/OAuthAuthorizeToken?
oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback&
oauth_token=*******
この戻り値を単純にnavigateToURL( res.oauthApprovalUrl)と入れてやると新しいタブ(ウィンドウ)にhttps://www.google.com/accounts/OAuthAuthorizeTokenのページが開き、認証が表示される。
認証がすむとoauth_callback=のURL、http://oauth.gmodules.com/gadgets/oauthcallbackに飛んで、すぐにWindowは閉じられる。
サンプルに使われているpopup.jsを使用していると、ポップアップWindowが閉じられたのを検出してonClose:に設定されたfunctionが実行される。サンプルでは再度リクエストを実行している。
ここで、FlashからnavigateToURL()した場合、新しく作られたWindowのCloseを検出することができない。
コールバック(http://oauth.gmodules.com/gadgets/oauthcallback)はどうなっているのかと見てみると、以下の短い内容でした。
<html> <head> <title>Close this window</title> </head> <body> <script type='text/javascript'> try { window.opener.gadgets.io.oauthReceivedCallbackUrl_ = document.location.href; } catch (e) { } window.close(); </script> Close this window. </body> </html>
このhtmlを自前のガジェットで置き換えてやるか、gadgets.io.oauthReceivedCallbackUrl_の内容の変化を監視してやると、認証画面が終了したことを知ることができる。
実はまだためしていない。。。
またOAuth周りののテストのために、OAuthを一旦解除するのがとてもめんどい。
http://shindig.apache.org/shindig-1.1.x/shindig-features/jsdoc/symbols/src/_home_lindner_projects_shindig_trunk_target_checkout_features_src_main_javascript_features_core.io_io.js.html