电子邮件验证+电子邮件/密码验证的使用不适用于在用户开始使用服务之前绝对需要电子邮件验证的服务。
让我用Google sign in First的一个例子来解释。
首先,用户登录他们的Google帐户(比如电子邮件是op@op.com
),并授权您的应用程序。然后使用通过它接收到的令牌创建一个凭据,并与Firebase交换这些令牌以将用户登录到Firebase。用户需要存在于Firebase中,您才能使用Firebase的电子邮件验证服务(因为获取电子邮件是否已验证信息的唯一方法是检查客户端中的CurrentUser
对象,因此您需要登录的用户来检查他们的电子邮件是否已验证。您不能使用电子邮件地址调用Auth
方法来检查是否已验证)。因此,一旦您将用户登录到Firebase,您就会向他们发送一个验证链接,一切都很好。您可以通过检查用户对象以进行电子邮件验证来配置客户端上的视图。这里需要注意的重要一点是,知道该用户电子邮件地址的其他用户不能在您的服务上使用op@op.com
注册:这是因为他们需要使用该电子邮件登录Google才能注册。
Facebook在这方面与谷歌签到类似。
但是,对于电子邮件/密码,任何人都可以拿着别人的电子邮件,用它创建一个帐户!而且,由于在用户注册到Firebase之前,您不能发送验证链接,所以您实际上是在让世界上的任何人“屏蔽”您服务上的电子邮件地址。我最初试图在电子邮件注册到Firebase之前确保电子邮件验证,但很快意识到我需要Firebase中的用户做任何电子邮件验证。
是我错过了什么,还是这是预期的行为?如果这真的是它的工作方式,那么我可能只是不允许电子邮件/密码登录在我的应用程序。
旁白:我有的另一个想法是通过发送给他们一个6位数的代码来做验证,并在Firebase中维护我自己的验证系统。但是我不能给它添加任何安全规则,因为没有登录用户的任何客户端都需要访问它==>潜在的系统滥用。
首先感谢您尝试通读长篇解释。
因此,即使可以在未经验证的情况下创建帐户,您仍然可以使用安全规则阻止用户访问。后者才是重要的,控制访问。下面是如何使用实时数据库规则执行此操作的示例:
{
"rules": {
"users": {
"$user": {
".read": "auth.token.email_verified == true && auth.uid === $user",
".write": "auth.token.email_verified == true && auth.uid === $user"
}
}
}
}
如果您正在通过解析令牌有效负载并检查email_verified
来验证服务器上的ID令牌,那么您也可以自己执行此操作。
所以即使创建了用户帐户,除非用户经过验证,否则他们将无法访问您的app/站点数据。
如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子
我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。
每当我在Firebase中使用电子邮件/密码身份验证提供程序时,提供程序都会在成功注册时发送一个无记名令牌,即使是。是否有一种开箱即用的方法将电子邮件/密码身份验证提供程序配置为在用户验证其电子邮件地址之前不发送无记名令牌(并返回403错误)? 请注意,我知道如何创建用户、登录用户、发送验证电子邮件等。。。使用firebase v9。x通过firebase/auth中的方法创建用户(使用Email
对于Firebase上托管的Web应用程序,我希望通过电子邮件向新用户发送验证链接来验证他们。我浏览了文档,创建了自定义电子邮件操作处理程序,配置了自定义域,密码验证工作正常。 那么,如何触发密码验证?如何获取oobCode和apiKey参数?我正在注册一个新用户罚款和什么都没有发生在我的身份监听器页面?
在本章中,我们将向您展示如何使用Firebase电子邮件/密码身份验证。 创建用户 要对用户进行身份验证,我们可以使用createUserWithEmailAndPassword(email, password)方法。 例子 (Example) 让我们考虑以下示例。 var email = "myemail@email.com"; var password = "mypassword"; fire