当前位置: 首页 > 知识库问答 >
问题:

在确认注册之前,使用Flutter和Firebase验证用户的电子邮件地址

须鸿祯
2023-03-14

我创建了一个与我的 Flutter 应用配合使用的登录和注册屏幕,使用 Firebase 作为后端身份验证服务。我能够在登录,注册和重置密码屏幕之间切换。

问题

目前,注册屏幕接受输入的任何电子邮件地址,无论它是否真实。例如,如果我键入 gvevg@gverwbgw.com,它将允许用户注册。当涉及到虚假帐户和垃圾邮件等时,这显然是一个问题。

目标

我基本上想能够编辑我的代码,自动生成一个电子邮件地址验证电子邮件,防止用户登录,在他们的电子邮件地址被验证之前。我编写的代码使用了< code>Future 、< code>FirebaseAuth和< code>async/await来实现这一点。

我的当前代码

首先,我定义了一个AuthBase抽象类,它创建了“createUserSusEmailAndPassword”函数(以及其他函数),如下所示:

abstract class AuthBase {
  Stream<User> get onAuthStateChanged;
  Future<User> currentUser();
  Future<User> createUserWithEmailAndPassword(String email, String password);
}

然后,我创建了一个Auth函数,该函数实现了AuthBase,从Firebase获取当前用户,并创建了注册Future函数,如下所示:

class Auth implements AuthBase {
  final _firebaseAuth = FirebaseAuth.instance;

  // This creates the user ID token variable (if one doesn't already exist) which is then populated using one of the login methods.
  User _userFromFirebase(FirebaseUser user) {
    if (user == null) {
      return null;
    }
    return User(uid: user.uid);
  }

  // This helps to get the user from Google Firebase, noting if there is or isn't a user with those login details already.
  @override
  Stream<User> get onAuthStateChanged {
    return _firebaseAuth.onAuthStateChanged.map(_userFromFirebase);
  }

  // This identifies the current user, who is logged in at the time.
  @override
  Future<User> currentUser() async {
    final user = await _firebaseAuth.currentUser();
    return _userFromFirebase(user);
  }

  // This creates the user account for an email-and-password sign-in, with firebase, if it doesn't already exist.
  @override
  Future<User> createUserWithEmailAndPassword(
      String email, String password) async {
    final authResult = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email, password: password);
    return _userFromFirebase(authResult.user);
  }
}

我的问题

如何编辑我的代码,以便它允许我为任何想要使用电子邮件登录的用户自动实现电子邮件验证?我相信sendEmailVeration()函数必须使用Firebase User,尽管我不确定如何在这里实现它。我将不胜感激。谢谢!

共有1个答案

顾嘉良
2023-03-14

电子邮件密码认证只要求用户知道电子邮件密码的组合。它本身不需要验证电子邮件地址来登录。如果您希望在允许访问其他数据之前验证电子邮件地址,您可以通过检查用户的< code>email_verified声明令牌来实现,例如在数据库的安全规则中。

另见:

  • 如何将Firebase数据库锁定给来自特定(电子邮件)域的任何用户
  • 注册时Firebase电子邮件验证
  • 如何防止Firebase/Vue中的用户身份验证。电子邮件验证前的js
  • 仅允许预先验证的用户登录Firebase
 类似资料:
  • 最近为我的应用程序创建了一个简单的注册页面,该页面接受电子邮件和密码这两个值,检查它们是否有效,然后将它们传递给firebase函数来创建用户。值被正确传递,然而,我总是得到消息说“注册失败”。firebase连接是活动的,我已经允许用户使用电子邮件和密码认证注册。 我觉得这是我的文件的一个问题,可能有错误的依赖关系,但是,我是Firebase的新手,无法解决这个问题。 下面是我的注册表单,bui

  • 我正在使用Vue,这是我的注册方法,它所做的是注册任何电子邮件ID... 我已在 Firebase 控制台中配置了电子邮件验证。现在,我希望注册方法发送验证邮件,并且只有在用户已验证电子邮件时才注册用户。 我应该如何修改现有代码?我很困惑。

  • 在用户注册Firebase之前,我应该如何验证电子邮件地址?我知道电子邮件地址已通过,但这仅适用于当前用户。因此,必须在发送验证电子邮件之前创建用户。这不会有多大帮助,因为您显然必须在将电子邮件添加到数据库之前验证它。因此,什么是好的解决方法?

  • 我能够在注册前验证用户电子邮件。但我想收到验证电子邮件到我的电子邮件地址以完成注册过程。我想收到我的电子邮件地址的通知,并且只有在我批准后才完成注册过程。我检查了电子邮件验证:auth-service.ts 注册:

  • 是否可以在创建 Firebase 用户之前发送验证电子邮件并验证电子邮件?在我的代码中,我只能在从 Firebase 调用使用电子邮件和密码创建用户方法后发送电子邮件验证。即使我没有验证电子邮件,我仍然可以在 Firebase 控制台中看到该电子邮件的条目。

  • 我试图建立我的应用程序的电子邮件验证部分。因此,用户输入他们的电子邮件,点击提交,他们将收到一封带有一次性“令牌”或链接的电子邮件,允许他们访问实际的注册页面。我如何处理这个与django的新版本,因为 来自django的 来自django的 代码似乎不起作用? 实际错误是无法从django导入name six。乌提尔斯。我在其他答案中看到,获取错误无法从“django”导入名称“six”。使用D