2013-05-09 21 views
2

我在Oauth上並沒有那麼強大,所以需要一些幫助來實現我的FreeAgent會計系統的接口,他們提供了一個Oauth 2 API。如何使用Rauth python庫刷新令牌?

我想在標準的Python代碼,它似乎是最好的圖書館是勞伊特。 我的問題是令人耳目一新的令牌。

是否有任何關於如何使用python Rauth庫刷新過期令牌的好示例? 那麼處理過期的最佳做法是什麼? 我可以嘗試使用我的令牌,並在因過期錯誤的情況下要求刷新。 或者也許我可以跟蹤令牌的生命,以防萬一我的計算表明它已過期,那麼請求另一個令牌。 哪裏最好保存所有這些令牌信息:在一個配置文件中,在JSON對象,到數據庫...?

感謝您的任何幫助。

格雷格

回答

5

Or maybe I could keep track of the life of a token and in case my computation says it's expired then ask for another.

這是我會推薦。在您提出請求之前,在當前的令牌持續到期之前,檢查令牌是否已過期。如果有,使用刷新令牌和訪問令牌方法來檢索新的訪問令牌。該refresh_token方法可能是這個樣子:

def refresh_token(): 
    if not expired(): 
     return 

    # OAuth 2.0 example 
    data = {'client_id':client_id, 
      'client_secret': client_secret, 
      'grant_type': 'refresh_token', 
      'refresh_token': refresh_token} 

    return service.get_access_token(data=data) 

因爲確切的過程可以從供應商提供略有不同,它不是由rauth記錄。但是,也許我們應該記下文檔中的這種一般模式。

希望有幫助!

+0

謝謝麥克斯,我會嘗試你的建議。如果我沒有錯,你是Rauth的作者,感謝你的支持。 – Greggy 2013-05-09 21:28:04

+0

是的,我是作者。如果您還有其他問題,請告訴我。 – maxcountryman 2013-05-10 15:31:11

+0

沒有最大值,它不起作用。 我這樣做: '服務= rauth.OAuth2Service(...) 數據= {。正如你所說...} 回報service.get_access_token(數據=數據)' 但我得到這個錯誤: 'KeyError:'解碼器無法處理access_token與提供商返回的數據。可能需要不同的解碼器。提供者返回:{「access_token」:「xxxxxxxxxxxxxx」,「token_type」:「承載」,「expires_in」:604800}' – Greggy 2013-05-15 18:17:46