我正在使用imgur api。我使用沒有數據庫的Flask。在Flask中沒有數據庫存儲Oauth2 access_token
我試圖訪問一個專用帳戶,所以在這個應用程序中不會有多個用戶帳戶(因此我只需手動授權一次,然後使用tokens the service gives to me完成其餘操作,無需一個數據庫)。 一旦在帳戶上授權應用程序,Imgur會給我兩個令牌:一個小時後過期的access_token和一個不過期的refresh_token,可用於請求新的access_token。
我想不出任何方法的不同只在需要時該使用這種兩個標記並刷新訪問一個正確的發送請求到服務器:
from flask import Flask
from foobar import foo, bar
import config
app = Flask(__name__)
app.config.from_object(config)
#I initialize the access_token with the value hardcoded in the config file
access_token = config.access_token
@app.route('/',methods=['POST'])
def home():
#I access the value i initialized when starting the server
global access_token
if request.method == 'POST':
#I send the access_token to a method that contacts Imgur servers and checks if it's still valid. If not it will request and return a new one.
access_token = foo(access_token)
#I send the token, now sure it's always a valid one, to the rest of the logic that uses it to do actual requests
bar(access_token)
這工作。只要我不重新啓動服務器,它只會在需要時才需要一個新的access_token,但它並不是一個很好的做事方式。硬編碼在一個小時內到期的令牌聽起來真的很愚蠢,我真的不知道如果使用該全局變量可能是一種好的做法,也不會在某些情況下從配置文件重新初始化,我目前忽略。我怎樣才能避免這種情況?我應該將新刷新的access_token寫入文件並從配置文件中加載它?這是否會造成安全隱患?
此外,refresh_token不會過期,所以我認爲將它存儲在cofing文件中沒有問題,但是每當我請求access_token時,sill也會給我一個新的refresh_token,我應該更新它嗎?這似乎沒有必要,舊的仍然有效,但也許我錯過了一些東西。
這真讓我困惑。我清楚地記得,在它說它在一小時後過期的文檔中,我不知道我是完全誤讀了它還是最近更新了它。我已經寫過一個方法,我在使用任何請求聯繫服務器來檢查它是否仍然有效的請求之前使用,如果不是,它會請求一個新的並返回它。如果我在一週前正確記得測試時離開服務器運行並去吃飯,當我回來時(超過一個小時),我提出了一個請求,並且該方法返回了一個新的令牌,但也許我記得它錯誤。無論如何,謝謝你的建議! – seesharp