在flask请求之间传递对象,特别是intuitoauth AuthClient

2024-09-30 01:35:56 发布

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

我正在尝试编写一个flask应用程序来与quickbooks online api集成,但在身份验证方面遇到了问题。按照他们的python指南,我将下面的代码放在一起。目前我的问题是,我不知道如何在请求之间传递AuthClient对象。我假设我可以只使用flask会话,但是从会话中调用的AuthClient对象是不完整的,据我所知,它只包含shell,没有填充的数据

我是否需要尝试对AuthClient进行子类化,并重写用于酸洗的方法?如果是这样,任何关于如何开始的提示都会非常有用

此外,如果有人有任何与quickbooks集成的经验,那么这方面的技巧将非常有用

from flask import Flask, session, redirect, request
from flask_session import Session
from intuitlib.client import AuthClient
from intuitlib.enums import Scopes
import os
import requests

SECRET_KEY = 'something'
DEBUG = True
REDIS_URL = 'redis://10.74.10.235:6379/0'

app = Flask(__name__)
app.debug = DEBUG
app.secret_key = SECRET_KEY
app.config['SESSION_TYPE'] = 'filesystem'
app.config['SECRET_KEY'] = SECRET_KEY
app.config['REDIS_URL'] = REDIS_URL
sess = Session()
sess.init_app(app)


@app.route('/auth')
def auth():
    client_id = os.environ['CLIENT_ID']
    client_secret = os.environ['CLIENT_SECRET']
    redirect_uri = os.environ['REDIRECT_URI']
    environment = os.environ['ENVIRONMENT']

    auth_client = AuthClient(client_id, client_secret, redirect_uri, environment)
    url = auth_client.get_authorization_url([Scopes.ACCOUNTING])
    session['auth_client'] = auth_client

    return redirect(url)


@app.route('/callback')
def callback():
    auth_client = session['auth_client']

    state = str(request.args.get('state'))
    auth_code = str(request.args.get('auth_code'))
    realm_id = str(request.args.get('realm_id'))

    auth_client.get_bearer_token(auth_code, realm_id=realm_id)
    return 'boobs'


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

Tags: keyfromimportclientauthidappflask
1条回答
网友
1楼 · 发布于 2024-09-30 01:35:56

嗯,我试图保存错误的信息。在此处找到实际使用Intuitilib模块的示例应用程序https://github.com/IntuitDeveloper/SampleOAuth2_UsingPythonClient/blob/master/app/views.py

事实证明,不是在每次获取AuthCLient时都向其传递AuthCLient,而是为其提供额外的参数,例如:

auth_client = AuthClient(
    settings.client_id,
    settings.client_secret,
    settings.redirect_uri,
    settings.environment,
    access_token=session.get('access_token', None),
    refresh_token=session.get('refresh_token', None),
    id_token=session.get('id_token', None),
)

仅在会话中保存令牌。 在获取承载令牌和400错误方面仍然存在一些问题,但此问题已得到解决

相关问题 更多 >

    热门问题