Stripe客户门户无法读取session变量,报UnboundLocalError错误
问题原因
你遇到的UnboundLocalError是因为在customer_portal函数中,先引用了session['account_name'],但后续又重新赋值了session变量:
session = stripe.billing_portal.Session.create(...)
Python会将函数内的session视为局部变量,所以在函数开头访问session['account_name']时,局部的session还未被定义,就触发了这个错误。
解决方案
最安全且清晰的做法是重命名Stripe返回的会话变量,避免和Flask的session上下文变量冲突:
@auth.route('/create-customer-portal-session', methods=['GET', 'POST']) def customer_portal(): # 这里使用的是Flask的session上下文变量 getting = db.child('users').child(session['account_name']).get() getting = json.loads(json.dumps(getting.val())) # 重命名为stripe_session,避免冲突 stripe_session = stripe.billing_portal.Session.create( customer=getting['customer_id'], return_url=YOUR_DOMAIN, ) print(stripe_session.url) return redirect(stripe_session.url, code=303)
如果一定要保留session作为变量名,也可以显式声明使用全局的session(不推荐,可能引发上下文问题):
@auth.route('/create-customer-portal-session', methods=['GET', 'POST']) def customer_portal(): global session # 声明使用全局session变量 getting = db.child('users').child(session['account_name']).get() getting = json.loads(json.dumps(getting.val())) session = stripe.billing_portal.Session.create( customer=getting['customer_id'], return_url=YOUR_DOMAIN, ) print(session.url) return redirect(session.url, code=303)
内容的提问来源于stack exchange,提问作者Ryan morris
相关产品推荐
相关产品推荐

