当我在不同子域之间移动时,我正在尝试使用OAuth令牌并将其存储在会话对象中。因此,我的应用程序从flask.mydomain.com
开始OAuth1.0a工作流。然后,它重定向到sub.mydomain.com/initiate
以获取请求令牌,我想使用会话保存oauth令牌密钥(不确定这是否是最好的方法),然后在sub.mydomain.com/authorize
进行授权。授权完成后,它将转到回调,但是会话中不存在oauth令牌密钥。我还试图保存OAuth1Session
,以便每当我们转到新路线时,该数据都将被保存。所以我不确定如何处理它,因为会话是在函数范围内定义的。
我读到app.secret_key = os.urandom(someval)
并没有使它发挥作用,而我本人使OAuth1Session
成为了全球化的公司,这听起来似乎不是一个好主意(回调)。
@app.route("/initiate")
def initiate():
oauth_session = OAuth1Session(client_key=client_key,client_secret=client_secret,callback_uri=callback_uri)
fetch_response = oauth_session.fetch_request_token(request_token_url)
oauth_token = fetch_response.get('oauth_token')
oauth_token_secret = fetch_response.get('oauth_token_secret')
session['oauth_token_secret'] = oauth_token_secret
full_authorization_url = oauth_session.authorization_url(authorize_url, request_token=oauth_token)
return redirect(full_authorization_url)
@app.route("/callback")
def callback():
session.permanent = True
if ('oauth_token_secret' not in session):
return "There is no oauth token secret"
verifier = request.args.get("oauth_verifier")
oauth_token = request.args.get("oauth_token")
oauth = OAuth1Session(
client_key=client_key,
client_secret=client_secret,
resource_owner_key=oauth_token,
resource_owner_secret=session['oauth_token_secret'],
verifier=verifier) # I would like this oauth session to persist until a certain amount of time before having to reauthenticate
fetch_access_tokens= oauth.fetch_access_token(access_token_url)
return redirect(url_for('.getstatus'))
@app.route("/getStatus")
def getstatus():
r = oauth.get(webservice_url + "/statuses")
if r.status_code == 401:
return redirect(url_for('initiate'))
print(r.content)
return r.content
答案 0 :(得分:0)
我已解决问题,该问题与应用程序的SERVER_NAME配置有关。 SERVER_NAME设置为flask.mydomain.com,因此我将其完全删除了