Firebase仅在成功付款后注册用户

Firebase仅在成功付款后注册用户,firebase,stripe-payments,Firebase,Stripe Payments,我正在尝试实现以下流程: 用户进入网站 用户单击“立即订阅” 用户被重定向到条带签出(因为这样更容易) 用户成功支付 用户现在可以登录(甚至更好-自动登录) 用户每月自动收费,更新数据库(控制访问) 长话短说:只有在用户付费时才允许用户访问 我正在使用Firebase,但似乎有很多障碍/难题: 我不能禁用注册(理想情况下只能通过订阅) 没有多大帮助,因为 在没有太多解释的情况下,它看起来有点吓人(特别是关于作为订阅模型基础的Webhook) 在使用Firebase时,我在网络上查看了所有关于

我正在尝试实现以下流程:

  • 用户进入网站
  • 用户单击“立即订阅”
  • 用户被重定向到
    条带签出
    (因为这样更容易)
  • 用户成功支付
  • 用户现在可以登录(甚至更好-自动登录)
  • 用户每月自动收费,更新数据库(控制访问)
  • 长话短说:只有在用户付费时才允许用户访问

    我正在使用Firebase,但似乎有很多障碍/难题:

    • 我不能禁用注册(理想情况下只能通过订阅)
    • 没有多大帮助,因为
    • 在没有太多解释的情况下,它看起来有点吓人(特别是关于作为订阅模型基础的Webhook)
    在使用Firebase时,我在网络上查看了所有关于订阅模式的信息,但几乎没有

    我的问题是:任何使用条带(任何,不必是签出-流程相同)和Firebase实现订阅服务的人?或者我应该使用自己的服务器,只对数据库使用Firebase


    当用户必须先注册然后付费(太多摩擦)时,我真的觉得它不是一个好的用户体验。

    使用云功能:

  • 在结帐期间创建条带客户
  • 创建firebase用户文档并将条带客户id保存到“用户”集合中
  • (使用
    userRecord.uid
    id进入
    doc()
    id)

    • 向用户发送电子邮件
    • 将电子邮件和密码发送回客户端
    在客户端:

  • 收到云功能服务器发送的成功消息后,让用户自动登录
  • 当用户登录时,从用户集合中获取条带订阅状态并将其显示给用户

  • 要求用户验证其电子邮件或更改密码。禁用所有编辑,直到用户验证其电子邮件或更改其密码


  • 使用云功能:

  • 在结帐期间创建条带客户
  • 创建firebase用户文档并将条带客户id保存到“用户”集合中
  • (使用
    userRecord.uid
    id进入
    doc()
    id)

    • 向用户发送电子邮件
    • 将电子邮件和密码发送回客户端
    在客户端:

  • 收到云功能服务器发送的成功消息后,让用户自动登录
  • 当用户登录时,从用户集合中获取条带订阅状态并将其显示给用户

  • 要求用户验证其电子邮件或更改密码。禁用所有编辑,直到用户验证其电子邮件或更改其密码


  • 两个问题:1。在后端创建客户?2.您打算向用户发送什么电子邮件?3.在多个API请求中使用密码四处走动是否安全。创建一个会话,然后使用客户id 2转到会话。在客户端,使电子邮件字段为必填字段,以便用户可以输入电子邮件3。如果电子邮件未经验证,您可以在后端使用“限制用户”操作来保护端点。我关于安全性的第3个问题更多的是关于凭据是否应该如此自由地传递。毕竟,它们是敏感数据,而定制声明则是另外一回事。也许发送代币会更好?为什么不在成功付款后创建客户呢?是的,那么在成功付款后,也许更重要的是()是更好的解决方案。在后端创建客户?2.您打算向用户发送什么电子邮件?3.在多个API请求中使用密码四处走动是否安全。创建一个会话,然后使用客户id 2转到会话。在客户端,使电子邮件字段为必填字段,以便用户可以输入电子邮件3。如果电子邮件未经验证,您可以在后端使用“限制用户”操作来保护端点。我关于安全性的第3个问题更多的是关于凭据是否应该如此自由地传递。毕竟,它们是敏感数据,而定制声明则是另外一回事。也许发送代币会更好?为什么不在成功付款后创建客户呢?是的,那么在成功付款后,()可能是更好的解决方案。
    stripe.customers.create({ email: 'user_email' }) // grab customer 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)