Google Gadget 登入判斷

Google Gadget 登入判斷

最近因為專案上的需要,要開發一個Gadget讓使用者可以使用;Gadget其實就是用一個iframe把你的網頁嵌進去而已,沒什麼難度;你只要把宣告的xml利用My Gadget加入,就可以進行測試。

image

<Module>  
<ModulePrefs title="hello world example" />   
<Content type="html">     
<![CDATA[ 
       Hello, world!
     ]]>
</Content> 
</Module>
(內文可以使用Html或是Url)

唯一碰到一個不好處理的地方就是登入驗證的問題:因為在IE中iframe無法存取跨網域的cookie,所以如果有需要Session之類的東西就顯得很麻煩,雖然我們直接可以轉頁或是自己增加參數判斷,但是Gadget只要有放大縮小,他就會重新載入,這樣一來登入狀態就會掉了;不過,Google在幫你帶iframe的時候,會增加一些hash參數,這些參數可以讓我們用來判斷使用者,例如:

#st=c%3Dig%26e%3DAPu7ico1vFP/WSFEcNdM%252B0FYiw4VTydWC2kmiKzvQ9xikzwXuIlnlsQ0DIK8XlJcVcw71b9%252B5M8%252BimSJARIlZd612IAoDy1PW0RB1Krl1HOWa2B5gRkuiqKCvpsh9gMz0c7o4I1FfeoO&gadgetId=112927440424110499518&gadgetOwner=107364228776182021982&gadgetViewer=107364228776182021982&rpctoken=1954845592&ifpctok=1954845592

 

當然,這些參數要透過Gadget API來存取會比較方便,我們可以透過gadgetOwner或是gadgetViewer來判斷來源端的使用者,這邊提供一個小範例:

我先透過gadgets.util.getUrlParameters來取得gadgetViewer,然後回傳到我的網站,藉由這個ID來處理…

<Module>
  <ModulePrefs title="我的Gadget" title_url="https://mygadget.com.tw" height="350" scaling="false" scrolling="true" description="這是說明" author="星寂" author_email="aaa@bbb.cc" screenshot="http://mygadget.com.tw/emsg280.gif" thumbnail="http://mygadget.com.tw/emsg120.gif" />
  <Content type="html">
  <![CDATA[
  <script type="text/javascript">
  var wrappedpage = "http://mygadget.com.tw/google";
  
  function init() 
  {      
	var id = gadgets.util.getUrlParameters()["gadgetViewer"]; 
    document.getElementById("wrapped").src = wrappedpage+ "?gadgetViewer=" + id;
	document.write(wrappedpage+ "?gadgetViewer=" + id);
  }
  
  gadgets.util.registerOnLoadHandler(init);
  </script>
<style>
  body {
  margin: 0;
  padding: 0;
  overflow: hidden;
  }  
</style>
  <iframe src="" name="wrapped" id="wrapped" width="100%" height="350px" style="border:none; margin:0; overflow:hidden; padding:0;" scrolling="no" frameborder=0 >
  </iframe>
]]>
</Content>

後面我的做法就比較偷懶,因為其實只要有一個可以識別的唯一ID,其實怎麼做都可以:我的做法是把他弄成ASP.NET Session ID,這樣不管存取什麼都方便很多,而且就算回到原網站也不需要再登入一次;不過要特別注意Session ID要在global中處理,平常的Session ID可是唯讀的哦。

 

相關連結:

MyGadget

Google Gadget開發相關

Google Gadget登入Cookie判斷

 

Dotblogs 的標籤: