firebase - Firebase 只有在付款成功后才能注册用户
问题描述
我正在尝试实现以下流程:
- 用户进入网站
- 用户点击
Subscribe now
- 用户被重定向到
Stripe Checkout
(因为它更容易) - 用户支付成功
- 用户现在可以登录(甚至更好 - 自动登录)
- 每月自动向用户收费,因此更新数据库(以控制访问)
长话短说:仅在用户付费时才授予用户访问权限。
我为此使用 Firebase,但似乎有很多障碍/头痛:
- 我无法禁用注册(最好只能通过订阅)
- Magic Link并没有多大帮助,因为您无法更改发送给用户的电子邮件模板
- 在官方示例中,它看起来有点令人生畏,没有太多解释(特别是关于作为订阅模型基础的 webhook)
在使用 Firebase 时,我在网上浏览了有关订阅模式的所有信息,但几乎没有。
我的问题是:任何人都使用Stripe(任何,不必是 Checkout - 流程相同)和Firebase实现订阅服务?还是我应该使用自己的服务器并将 Firebase 仅用于数据库?
当用户必须先注册然后付款(摩擦太大)时,我真的不认为它是一个好的用户体验。
解决方案
使用云功能:
- 在结帐时创建一个条纹客户。
stripe.customers.create({ email: 'user_email' }) // grab customer id
- 创建firebase用户文档并将条纹客户ID保存到“用户”集合中。
(使用userRecord.uid
id 到doc()
id 中)
firebaseAdmin.auth().createUser({
email: 'email',
password: 'temporary_password',
displayName: 'fullname'
})
.then((userRecord) => {
return firebaseAdminSDK.firestore()
.collection('users').doc(userRecord.uid)
.set({ stripe_account: 'cus_HILXPWljT9fKRA' })
})
- 向用户发送电子邮件
- 将电子邮件和密码发送回客户。
在客户端:
- 收到云功能服务器的成功消息后,让用户自动登录
firebase.auth().signInWithEmailAndPassword(data.email, data.password)
当用户登录时,
stripe_account
从用户集合中获取并获取条带订阅状态并将其显示给用户。要求用户验证其电子邮件或更改密码。禁用所有编辑,直到用户验证其电子邮件或更改其密码。
推荐阅读
- redhat-datavirt - JDV中是否存在函数NTILE
- jquery - jquery使用parseFloat和toFixed
- javascript - lodash 链式方法中的当前链
- javascript - OnEdit() 谷歌脚本触发器在函数中的使用
- android - 你如何让 Android TextView 向右展开?
- python - 如何在 Python 的 yaml 文件中配置多个字典键?
- laravel - laravel vue 无法获取数据
- python - Flask/python 路由在本地运行,但在 GCP 上崩溃
- javascript - Express:已解决的 Promise 将接听电话
- reactjs - Bootstrap 下拉菜单不适用于 React 路由器