2014-02-27 29 views
2

我正在構建一個使用PHP示例應用程序作爲參考的玻璃應用程序。當使用鏡像API時,我如何處理訪問令牌過期

據我瞭解,玻璃應用程序是一個面向用戶的web應用程序。當用戶訪問Web應用程序時,他們將授權Web應用程序(使用oauth2)訪問其資源,一旦授權成功,Web應用程序將獲得訪問令牌,然後將其保存在一個sqlite數據庫中(這裏有store_credentials()存儲訪問令牌的函數)。

因此,如果我有100個用戶訪問網絡應用並註冊,那麼數據庫將爲這些用戶保存100個訪問令牌。比方說,我有一些後端代碼每小時從RSS提要中提取,每當我發現有新故事時,我會將它推送給所有註冊用戶。比方說,我有一個cron作業,當觸發這個作業時,我會在數據庫中找到所有訪問令牌,並使用它們進行鏡像API調用來插入卡片。但是當我試圖進行鏡像API調用時,如果某些訪問令牌已過期怎麼辦?看來我需要讓用戶重新授權,但在這一點上我不會與用戶進行交互。如果我有一個刷新令牌,我可以再次調用oauth來獲得一個新的訪問令牌。

謝謝。

回答

2

你幾乎回答了你自己的問題 - 當你使用OAuth請求許可時,你也應該請求「離線」訪問。第一次爲每個用戶執行此操作時,它將爲您提供刷新令牌以及訪問令牌,並且您應該同時存儲這兩個令牌。如果您最初沒有請求離線訪問,則需要撤銷已授予的令牌並重新授予他們離線訪問權限。

如果您所指的示例應用程序是https://github.com/googleglass/mirror-quickstart-php中的示例應用程序,那麼所有這些都應該已經包含在庫中。在oauth2callback.php中從$client->getAccessToken()返回的憑證應包含訪問和刷新標記,並通過調用store_credentials()將這些憑證保存在同一文件中。客戶端庫應該檢查訪問令牌是否已過期,如果是,則在進行調用之前使用刷新令牌獲取新的令牌。

您可能需要查看這些不同點處的憑證對象的內容,並確保存在刷新令牌。如果不是,請嘗試撤消所有令牌並重新開始,因爲這聽起來像您第一次授權客戶端,而不請求脫機訪問。

如果你自己這樣做,最好的做法是刷新訪問令牌,如果它已經過期或即將到期(因爲可能有一些延遲),或者(甚至更好)嘗試撥打電話使用訪問令牌,如果失敗並出現身份驗證錯誤,則通過刷新令牌獲取新的訪問令牌,然後重試。

+1

感謝您的快速響應,您的回覆確認了我不確定的一些內容,現在當我回去閱讀https://developers.google.com/glass/develop/mirror/authorization時,它很清楚,我錯過了將訪問類型設置爲離線,並且有代碼示例就在那裏,我首先想念。 :) – Kelobyte

相關問題