在服务器/管理员上创建帐户后发送 Firebase 重置密码电子邮件

Posted

技术标签:

【中文标题】在服务器/管理员上创建帐户后发送 Firebase 重置密码电子邮件【英文标题】:Send Firebase Reset Password Email After Account Created On Server/Admin 【发布时间】:2018-12-01 10:22:26 【问题描述】:

我正在创建一个网站,企业可以在其中免费向他们的客户/用户提供我的服务。对于企业添加用户(在其企业帐户下),企业登录并输入其客户/用户的电子邮件之一。然后我将客户/用户电子邮件发送到 firebase 函数并以编程方式创建一个帐户。

我想向这个新用户发送一封电子邮件,内容是“已创建帐户:重置密码”等,我可以在浏览器上使用 sendPasswordResetEmail 来执行此操作,但此功能在 Firebase 功能/管理员中不可用。

我能想到的最佳选择是为每个新用户随机生成一个密码(即'ef53gs'),并在欢迎电子邮件中分享新密码,但我认为如果欢迎使用会更好电子邮件包含(重新)设置密码的链接。

知道如何让 sendPasswordResetEmail 之类的东西适用于 firebase 功能吗?

【问题讨论】:

这不是由 Cloud Functions for Firebase SDK 造成的,而是因为 Firebase Admin SDK 没有发送密码重置电子邮件的方法。目前这在 SDK 中确实是不可能的,您必须编写自己的身份验证提供程序,或者至少编写密码重置流程。 是的。我能做的是让人们在第一次登录时重置密码,但他们必须使用我在原始登录时创建的随机密码。从管理员 sdk 中,无论如何我可以创建一个链接,他们单击以重置他们的密码(我可以使用 Sendgrid 等单独发送电子邮件),或者从 admin sdk 生成一个链接,无需密码即可登录? 遗憾的是,目前无法从 Admin SDK 生成这样的链接。您可能想file a feature request 参与讨论。 Link firebase.google.com/docs/auth/admin/email-action-links 可能有助于使用云功能生成重置密码 url。 (部分:生成密码重置电子邮件链接,“firebase-admin”版本:6.4.0) 【参考方案1】:

我们遇到了同样的问题,因为 firebase-admin 没有像 firebase SDK 那样的 sendPasswordResetEmail()。我们最终只在服务器上使用firebase 客户端SDK 以及firebase-admin。工作正常。

【讨论】:

这里有一个简短的要点(主要是对我自己的提醒):gist.github.com/toraritte/65b6ddf8cb0795dccd01c23bd000438a【参考方案2】:

我认为一个更好的方法是实际使用 REST API 从管理员那里重置用户密码,而不向管理员站点添加客户端库。

curl 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/getOobConfirmationCode?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '"requestType":"PASSWORD_RESET","email":"[user@example.com]"'

[API KEY] 可以从 Project Settings > add an app >> click web 中获取,您将使用 JSON 获取配置,在 JSON 中有一个 APIKey 是您需要使用的。

【讨论】:

【参考方案3】:

admin sdk 有一个generatePasswordResetLink,它会为您创建链接,但随后由您负责处理发送电子邮件,您可以使用任何您喜欢的服务(例如 mailgun 或 mandrill)来执行此操作。这也让您可以更好地控制电子邮件模板。

【讨论】:

【参考方案4】:

这将是一种多租户或多级管理员类型的应用解决方案。只需创建一个 Web 界面,每个企业都可以在其中将用户添加到他们的服务中。您将需要使用 Admin SDK(服务器)为每个企业管理员生成权限。见:

Control Access with Custom Claims and Security Rules

Firebase Admin SDK 支持在用户帐户上定义自定义属性。这 提供实施各种访问控制策略的能力, 包括 Firebase 应用中基于角色的访问控制。这些习俗 属性可以为用户提供不同级别的访问权限(角色),其中 在应用程序的安全规则中强制执行。

【讨论】:

【参考方案5】:
pb = pyrebase.initialize_app(json.load(open('fbconfig.json')))
link=pb.auth().send_password_reset_email(email)
print("We have sent an password reset link to your email, check your inbox ")

以上代码与server sidem中的python admin sdk相关,无需自定义模板或smtp服务即可发送邮件

【讨论】:

以上是关于在服务器/管理员上创建帐户后发送 Firebase 重置密码电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

来自已经过身份验证的帐户的Firebase createUserWithEmailAndPassword()

创建 Firebase 登录并且不要更改 FirebaseAuth [重复]

如何首先在Firebase中发送电子邮件验证,然后创建帐户?

Android - Firebase - 将用户发送到聊天室

从应用发送 Firebase 通知请求

JAVA Android Studio 不向 Firebase 实时数据库发送数据