【发布时间】:2021-09-23 15:26:17
【问题描述】:
我正在使用 Stripe 让我的客户更改他们的计划,我们将他们发送到 external Stripe-hosted page 以完成结帐。在他们结帐后,Stripe 将他们发送回感谢页面并启动一个 webhook。
webhook 很棒,因为它不会更新任何数据库信息或更改他们的计划,直到付款成功并且他们的卡已被扣款。
我还使用 webhook 来“重置”他们对成功的信用卡收费的计划限制。因此,每个月,在每个成功的收费 webhook 上,限制都会更新。但如果用户在更新时处于活动会话中,我应该更新该会话。
但我正在努力解决的是,在 webhook 事件中如何更新活动的快速会话?
没有 req.session 对象,因为“事件”来自 Stripe 的 webhook。
app.post('/webhook', async (req, res) => {
/* <-- Update the database, which is good --> */
database.updateUser()
/* <-- Update their session if it's active --> */
// This won't work, because there is no req.session and no cookie being sent!
req.session.user.plan = parseWebhookData()
// I can't access the store, because I don't know the user's session id
// Plus, all my store is encrypted so I can't do a MongoDb query search for their session.
store.get(sid, callback)
// How do I update their session??
})
到目前为止,我唯一的解决方案是让数据库在他们访问的每个页面上重新更新他们的信息。但这会使我每页的响应时间减慢 1 秒!
【问题讨论】:
-
您好,找到解决方法了吗?我也有类似的情况。
-
@ShankarMorwal 刚刚想通了,看看我的回答 :)
标签: node.js express session stripe-payments webhooks