沿着多个子域和OAuth1Session

时间:2019-06-10 19:37:40

标签: python flask oauth

当我在不同子域之间移动时,我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

我已解决问题,该问题与应用程序的SERVER_NAME配置有关。 SERVER_NAME设置为flask.mydomain.com,因此我将其完全删除了