我如何/可以在stripe-webhook处理程序中调用FASTAPI异步函数,或者我的方法完全错误了吗



从高层来看,我正在尝试实现stripe-webhook,我希望通过将数据库中的值更新为true来处理成功的事件。我采用的方法是创建一个名为handle_verification的异步函数,该函数获取当前登录的用户并更新id_verified标志。

@app.get("/user")
async def get_current_user(authorize: AuthJWT = Depends()):
authorize.jwt_required()
id = authorize.get_jwt_subject()
return await User_Pydantic.from_queryset_single(UserModel.get(id=id))
@app.put('/user/verify')
async def handle_verification():
user = await get_current_user()
await UserModel.filter(id=user.id).update(id_verified = True)

我尝试在这里的webhook代码中调用这个函数

@app.post('/create-verification-session')
async def create_verification_session(request: Request):
verification_session = stripe.identity.VerificationSession.create(
type='document',
)
return verification_session.client_secret
@app.post('/verification-session-webhook')
async def webhook(request: Request ):
webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
data = await request.body()
print(data)
signature = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload=data,
sig_header=signature,
secret=webhook_secret
)
event_data = event['data']['object']
except stripe.error.SignatureVerificationError as e:
print(str(e))
return {'error': str(e)}
event_type = event['type']

if event_type == 'identity.verification_session.created':
print("Started verification")
print(event_data.url)
if event_type == 'identity.verification_session.verified':
print("All the verification checks passed")
await handle_verification()
return {'status': "success"}

我得到错误

AttributeError: 'Depends' object has no attribute 'jwt_required

我知道这个错误来自get_current_user(),因为异步顺序出现了问题。我曾尝试将handle_verification放入使用asyncio.run((的同步包装函数中,但没有成功。

我尝试了各种不同的修复尝试,我认为核心问题是我仍在学习异步和webhook以及所有这些爵士乐,所以我完全被难住了。我将感谢对我解决这个问题的方法的任何帮助,以及对可能比我现在更容易的不同方法的任何见解。提前感谢大家!

我对FastAPI和FastAPI JWT Auth不是很熟悉,但我会尽力提供帮助。

我查看了FastAPI JWT Auth示例,在我看来,您似乎想从get_current_user()函数中删除async说明符。我发现的所有示例都确保代码的这一部分是同步的。希望这就是确保在正确实例化authorize对象之前不会调用.jwt_required()所需的全部内容。

相关内容

最新更新