#flask #webhooks #stripe-payments
#фляжка #веб — крючки #stripe-платежи #flask
Вопрос:
Я пытаюсь отследить текущего клиента и связать данные webhook с идентификатором электронной почты пользователя.
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.
Пожалуйста, просветите меня, где я ошибаюсь
Комментарии:
1. Пользователь должен войти в систему. Где находится код для входа пользователя в систему?
Ответ №1:
current_user.is_authenticated
это бессмысленно, потому что СООБЩЕНИЕ подписано (это общедоступный маршрут). Проблема заключается в том, payload
что вы отправляете в API еще до запуска webhook. Добавьте массив metadata
и поместите туда user_id
. Тогда результирующий webhook также будет иметь metadata
… а metadata
имеет user_id
. В этой ситуации нет другого способа узнать о чем-либо user_id
, кроме как о том, что пользователь отсутствует.
Комментарии:
1. Большое спасибо! это имеет большой смысл!