从高层次来看,我正在尝试实现条带 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 以及所有爵士乐,所以我完全被难住了。我将不胜感激对我解决此问题的方法的任何帮助,以及对可能比我现在所拥有的更容易的不同方法的任何见解。谢谢大家!