Firebase 身份验证网页版 - 如何为电子邮件/密码登录添加垃圾邮件防护



对于我的网站,我想使用 Firebase 身份验证(而不是使用 FirebaseUI Web(构建自己的登录表单,用于基于电子邮件/密码的身份验证。我将使用createUserWithEmailAndPassword JS函数来创建新的用户帐户。但是,如何防止垃圾邮件注册?通常对于基于Web的表单,我会使用Google Recaptcha并验证服务器上的recaptcha。但是在这里,我没有使用我的服务器来创建用户帐户。我正在客户端调用以创建用户帐户。

当然,我将在流程中使用电子邮件验证,但是如何防止机器人首先创建帐户?

我也知道Firebase对来自单个IP的每分钟请求数有某种限制,但我想更进一步,尝试阻止这些注册。

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});

谢谢。

2年后,这个问题仍然有效,据我所知,这是不可能的。您可能不再需要这个问题的答案,但它可能会帮助其他人。即使您手动成功执行某些操作,这些 js 函数也会保留在那里,并且可以由任何知道如何操作的用户手动调用。

如果没有文档中没有提供的隐藏的绝密选项,则这是不可能的。有一个验证码选项,但它仅适用于电话身份验证。因此,您似乎有2个选择。

  1. 忽略并删除未验证其电子邮件地址的用户。

  2. 从 Firebase 控制台停用电子邮件选项并实施您自己的电子邮件选项 电子邮件身份验证。生成您自己的令牌并将用户登录 具有该自定义令牌的 Firebase。https://firebase.google.com/docs/auth/web/custom-auth

我正在跟进弗兰克什的回答。他是完全正确的,我同意我认为Firebase在进行电话身份验证时(以及现在在进行电话MFA时(自动集成ReCaptcha很奇怪,但在createUserWithEmailAndPassword中不提供通过recaptcha验证程序的支持。因此,真正解决此问题的唯一方法是执行以下操作:

  1. 在注册页面上手动设置 ReCaptcha(V2 或 V3(。请勿使用firebase. auth. RecaptchaVerifier,仅用于与电话身份验证集成。
  2. 调用createUserWithEmailAndPassword后,您需要立即调用自己的服务器来传递 recaptcha 令牌。这里有一篇关于如何使用Firebase Function执行此操作的Firebase博客文章:https://firebase.googleblog.com/2017/08/guard-your-web-content-from-abuse-with.html。注意 我认为Firebase记录了如何使用服务器端功能执行此操作,但没有将其与帐户创建直接集成,这有点奇怪。
  3. 最后一点是,在服务器端代码中,在调用验证验证码令牌后,您需要使用 Firebase 管理员 API 对 Firebase 用户设置自定义版权主张。这种说法可以是recaptchaPassed: true(或假的(。有关自定义声明的详细信息,请参阅 https://firebase.google.com/docs/auth/admin/custom-claims。

之后,您可以根据该自定义声明的值执行操作。例如,您可以在其他服务器端调用中读取该自定义声明,也可以在 Firestore 安全规则中使用它(关于此的好博客文章,https://medium.com/google-developers/controlling-data-access-using-firebase-auth-custom-claims-88b3c2c9352a(。如果验证码验证失败,您还可以选择立即删除用户服务器端(使用管理员 API(。

请注意,请务必了解,在客户端上的代码调用createUserWithEmailAndPassword后,无法保证某些恶意脚本会调用服务器端令牌验证函数。因此,其余代码可以保证特定 Firebase 用户通过验证码验证的唯一方法是查找您在用户服务器端设置的自定义声明。

最新更新