2012-11-21 40 views
1

我們的API返回會話失效(30分鐘不活動)的用戶授權碼。因此,如果我們使用身份驗證令牌進行api呼叫,它會將會話從通話時間更新爲30分鐘。如何處理app中的API令牌失效

經過30分鐘的非活動狀態後,api返回一個錯誤,表明令牌已過期。此時我們應該請求一個新的身份驗證令牌。

但是,這樣做的顯而易見的方式(向用戶顯示登錄屏幕並讓他們再次登錄)將意味着在應用程序中的某些功能中斷用戶。例如,我們有各種視圖控制器,其中包含選項和輸入,它們在流程結束時聚合並提交一個完整的API調用。如果會話在服務器上到期,而用戶正在填寫這些輸入和視圖,則在進行API調用時它們將被註銷,並且它們將在這些視圖中失去進展。

這有兩個可能的變通:

  1. 我們在我們自己的應用程序,以確保後的應用30分鐘不活動的用戶註銷設置定時器。這意味着它們在一組輸入過程中不會被註銷,但是這帶來了以下問題:即使我們正在運行自己的計時器,服務器API仍可能會過期。因此這不起作用。

  2. 我們每隔10秒左右輪詢服務器以詢問API授權令牌是否仍然有效。這會消耗電池,數據和各種各樣,只是不是一個合理的方式來做這樣的事情。

有沒有人有任何想法?

感謝 湯姆

+0

從API發送「您已註銷」消息有什麼意義?爲什麼不在密鑰過期後嘗試撥打新電話時將用戶登錄?非常像cookies在瀏覽器 – ale0xB

+0

中的工作原理是這樣的...問題是因爲他們可能在註銷之前完成加載。即使他們正在使用該應用,身份驗證令牌也可能會過期。 –

回答

1

從你的描述,這聽起來像一個典型的失敗的事務問題。以防萬一您不熟悉事務處理,「Nuts and Bolts of Transaction Processing」是該主題的入門書。

如果您有能力修改後端系統,您將需要確保一個ACID後端。

這可能意味着在客戶端建立數據,並且在完成事務之前不會將數據發送到服務器。這樣,如果會話超時,客戶端仍然具有完成該事務所需的所有數據。 (槓桿原子性)

這可能意味着有一個交易令牌。在創建新會話時,客戶端可以向服務器發送事務令牌,並在新會話中恢復事務狀態。 (槓桿耐久性)

對我來說,這兩個選項都比刪除現有的交易和強制用戶重新開始更好。

希望有所幫助。