Python中的Oauth2 with Flask从API获取302

2024-10-01 05:06:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python和Flask访问MeisterTask的API,不管我做什么,我似乎总能从API得到302代码作为回报,尽管我可以得到一个访问令牌(或者我认为是这样)。以下是我迄今为止的代码(我试着减少它,这是我能得到的复制错误的最小片段):

from flask import Flask, redirect, url_for, session, request, jsonify
from flask_oauthlib.client import OAuth

app = Flask(__name__)
app.debug = True
app.secret_key = "development"
oauth = OAuth(app)

meistertask = oauth.remote_app(
    'meistertask',
    consumer_key= "XXXXXX",
    consumer_secret= "XXXXXX",
    request_token_params={"scope" : "meistertask"},
    base_url='https://www.meistertask.com/api',
    request_token_url=None,
    access_token_method='GET',
    access_token_url='https://www.mindmeister.com/login/oauth2/token',
    authorize_url='https://www.mindmeister.com/oauth2/authorize'
    )

@app.route('/')
def index():
    if 'meistertask_token' in session:
        me = meistertask.get('user')
        return jsonify(me.data)
    return redirect(url_for('login'))


@app.route('/login')
def login():
    return meistertask.authorize(callback=url_for('authorized', _external=True))


@app.route('/logout')
def logout():
    session.pop('meistertask_token', None)
    return redirect(url_for('index'))


@app.route('/login/authorized')
def authorized():
    resp = meistertask.authorized_response()
    print(resp.get('code'))
    if resp is None or resp.get('code') is None:
        return 'Access denied: reason=%s error=%s resp=%s' % (
            request.args['error'],
            request.args['error_description'],
            resp
               )
    session['meistertask_token'] = (resp['code'], '')
    return "Hello"


@meistertask.tokengetter
def get_meistertask_oauth_token():
    return session.get('meistertask_token')

if __name__ == "__main__":
    app.run()

这是回溯:

^{pr2}$

我试过的东西

  • 尝试修改方法以从get获取访问令牌到POST。API明确指出我应该使用GET,然而我在flask_oauthlib的GitHub上看到的其他示例都使用POST(示例已经有3年的历史了,但有些仍然有效,即GitHub示例)。要么给出相同的结果。在
  • 试着赤裸裸地,没有任何图书馆。结果代码的长度是原来的三倍,而且还存在更多问题。在
  • 用姜戈代替烧瓶。甚至从来没有设法让hello world的例子运行,这是太多的工作,而且我还发现了库flask_oauthlib。在

值得一提的事情

  • 我从这里GitHub example派生出这段代码
  • 为了保持代码片段的简短,我省略了一些代码,它确定服务器应该使用SSL(根据来自API的请求,即重定向的uri应该使用HTTPS)
  • 该应用程序设法将我重定向到MeisterTask并请求我的许可。一旦我授予它,它将重定向到“https://127.0.0.1:5000/login/authorized?code=some\u token”,在那里我得到回溯。如果我使用Chrome的调试工具来查看所发出的请求和接收到的内容,我会发现我从API得到了302,但是我也得到了一个访问令牌。在
  • 我用python3.7.0运行windows10

那有什么关系?下一步是什么?我已经没有东西可以试了。感谢您抽出时间来解决这个问题!


Tags: 代码tokenapiappurlflaskgetreturn