javascript - 如何使用 firebase 发送唯一的注册链接?

标签 javascript firebase google-cloud-functions

我想构建一个用户只能通过“邀请”注册的应用程序。已经拥有帐户的用户可以向指定的电子邮件地址发送邀请,然后该应用程序会发送一封电子邮件,其中包含指向注册的链接,其中有一个 token ,并且只能使用指定的电子邮件地址。

首先,如何从 firebase 发送“自动”电子邮件,其次,如何为 URL 生成唯一的注册 token ?

最佳答案

要从 Firebase 发送电子邮件,您可以使用 Cloud Function .关于这个主题有一个官方示例:https://github.com/firebase/functions-samples/tree/Node-8/email-confirmation

正如 Martin Zeitler 所说,您可以使用 push()生成唯一 token 并使用相应电子邮件创建记录的方法。然后当新用户尝试注册时,您可以在注册之前检查他的电子邮件是否与 token 相对应。您可以通过不同的方式做到这一点:再次使用 Cloud Functions,例如使用 HTTPS 云函数(参见 https://firebase.google.com/docs/functions/http-events )或通过在数据库中创建触发云函数的记录(参见 https://firebase.google.com/docs/functions/database-events )。在这两种情况下,您都可以使用 Admin SDK 来注册/创建用户,请参阅 https://firebase.google.com/docs/reference/admin/node/admin.auth.Authhttps://firebase.google.com/docs/auth/admin/manage-users#create_a_user

根据您的评论更新

例如,您可以有一个表单,要求受邀用户输入他的电子邮件和他收到的唯一 token (您可以通过电子邮件中发送的链接打开并预填写此表单)。提交此表单后,它会在实时数据库中创建一个节点,并且此节点创建会触发一个 Cloud Function:

  • 首先,将检查 token 和电子邮件是否对应(并可能检查它们之前未使用过);
  • 其次,如果之前的检查没问题,会将用户注册(即创建)到您的 Firebase 应用。

具体来说,假设在提交表单时我们创建了以下节点:

- registrationRequests
    -UID
       -email: .....
       -token: .....

您可以按照以下方式创建 Cloud Function:

exports.createInvitedUser = functions.database.ref('/registrationRequests/{requestId}')
    .onCreate((snap, context) => {
      const createdData = snap.val();
      const email = createdData.email;
      const token= createdData.token;

      //First action, verify email and token by reading the node of the database where you initially stored the email/token

     //Second action, register the user by using admin.auth().createUser({})
     //See https://firebase.google.com/docs/auth/admin/manage-users#create_a_user

    })

关于javascript - 如何使用 firebase 发送唯一的注册链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224780/

相关文章:

javascript - 如何从解析的 JSON 数据中获取特定值?

javascript - Firebase 云函数 : "status" :"INVALID_ARGUMENT"

javascript - Firestore Cloud Function 时间戳转换

node.js - 我在哪里可以找到 firebase-debug.log 以了解为什么模拟器没有完全关闭?

javascript - css 转换不适用于 firefox

javascript - 到前 15 分钟 javascript 的时间

javascript - js递归函数意外改变变量

ios - ionic cordova 和 firebase 中 iOS 应用的推送通知设置

javascript - AngularFire推送功能

firebase - Firebase 多路径更新的云功能