问题描述
我正在尝试跟踪当前客户并将Webhook详细信息链接到用户的电子邮件ID。
models.py
from flask_login import UserMixin
from . import db
class User(UserMixin,db.Model):
id = db.Column(db.Integer,primary_key=True) # primary keys are required by sqlAlchemy
#admin=db.Column
public_id=db.Column(db.String(50),unique=True)
email = db.Column(db.String(100),unique=True)
password = db.Column(db.String(100))
name = db.Column(db.String(1000))
main.py
@main.route("/webhook",methods=["POST"])
def webhooks():
payload = request.get_data(as_text=True)
sig_header = request.headers.get("Stripe-Signature",None)
try:
event = stripe.Webhook.construct_event(
payload,sig_header,stripe_keys["endpoint_secret"]
)
except ValueError as e:
# Invalid payload
print("Invalid payload")
return "Invalid payload",400
except stripe.error.SignatureVerificationError as e:
return "Invalid signature",400
if current_user.is_authenticated:
email=current_user.email
else:
print("Not authenticated!")
它一直打印“未认证!”万一我将@login_required用于webhook端点,我会不断收到302错误。
请告诉我我要去哪里哪里
解决方法
current_user.is_authenticated
是无意义的,因为POST已签名(这是一条公共路线)。问题是payload
是在触发Webhook之前发送给API的。将数组metadata
添加到user_id
中。然后,所得的Webhook也将具有metadata
...,而metadata
具有user_id
。在这种情况下,因为没有用户在场,因此没有其他方法可以知道任何user_id
。