2011-08-09 74 views
1

我正在創建Chrome擴展程序,而不是Chrome Web應用程序。這個應用程序只包含html,js,image和css文件。應用程序連接到服務器以獲取數據。我選擇這樣做,因爲它會減少用戶下載的文件數量。使用Backbone.js我的應用程序中有一個MVC體系結構。因此應用程序只發送json。Chrome擴展程序/ Web應用程序會話控件

現在說了這個,我需要一個會話管理。我計劃在該組織使用Google Apps時使用Google身份驗證。我需要一種方法,一旦用戶使用google auth登錄,服務器在每次應用程序發出請求時都獲取用戶名。

如果可能,在請求標題中添加用戶名是個好主意。或者我應該使用cookie?任何人都可以告訴我如何在這種情況下使用cookie?

回答

1

有關在您的應用中使用Google身份驗證的幫助,請查看Google的OAuth tutorial,隨附您所需的全部內容(我沒有花時間使用此功能進行設置)。

至於會話管理。 Google使用的OAuth的實現將令牌存儲在localStorage中。此外,如extensions overview中簡要提及的,我們預計將使用localStorage來存儲數據。因此,我建議您將用戶名稱存儲在此處,因爲它可以在應用程序的整個生命週期中訪問(直到它被卸載)。但是,您可能需要管理此處存儲的名稱,並考慮用戶登錄和註銷時應發生的情況。這就是說;我不確定sessionStorage會是更好的選擇,因爲我以前從未使用過它,更不用說在擴展中。

注意

localStorage只有其對應存儲字符串,所以我建議用它使用到parsestringify獲取並單獨設置你的價值觀的包裝。

+0

另見http://code.google.com/chrome /extensions/trunk/experimental.settings.html,這是一種以同步友好的方式存儲設置的新(但是實驗性)方式。 –

+0

我不得不承認API根本不會吸引我,因爲使用回調函數來獲取/設置設置會使至少對我而言,代碼不夠吸引人,並且不整潔。在我看來,簡單的getter/setters應該用於設置。希望這會改變,但由於在現有的API中使用回調函數,我猜他們使用這種方法是有原因的。 – Alasdair

2

這可能是一個遲到的反應,但我想爲您呈現一個更優雅的解決方案,因爲用戶在其瀏覽器中啓用了Cookie。 首先閱讀我的answer關於另一個問題。現在

,您可以從您的內容腳本發送跨起源XHR所有你需要做的是保存你所有的認證和會話管理在服務器只。這是正確的,你只需要顯示用戶是否登錄,並根據服務器響應在客戶端註銷按鈕。

請按照下列步驟操作。

  1. 在客戶端每當用戶訪問您的Chrome網絡應用,盲目做的XMLHttpRequest到服務器,而無需擔心身份驗證,只要保持標籤上從我在下面描述的服務器響應。

  2. 在服務器每當您收到有效會話或會話cookie的請求檢查時。如果會話有效,則發送適當的響應,如果不發送錯誤,401或任何其他響應與您的客戶端通信該會話無效。如果您發送錯誤代碼(如401),則會更好,因爲您可以在客戶端上放置通用腳本以通知他們未登錄。

  3. 在客戶端如果服務器的響應是正確的,顯示它,否則顯示登錄鏈接到您的網站。

  4. 重要:顯示註銷按鈕,如果用戶登錄

看看我實現這個in my extension

+0

'在服務器上,每當您收到請求檢查有效會話或會話cookie時.'我不明白這一點。如何擴展將能夠發送會話cookie? – avi

+0

Chrome在其內部數據庫中存儲每個域的Cookie。無論您何時從瀏覽器發送請求(除了來自隱身模式),Chrome都會發送與該域相關的所有Cookie。 –

+0

這些cookies是否安全且無法被任何人訪問? – avi