我想构建一个用户只能通过“邀请”注册的应用程序。已经拥有帐户的用户可以向指定的电子邮件地址发送邀请,然后该应用程序会发送一封电子邮件,其中包含指向注册的链接,其中有一个 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.Auth和 https://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/