在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)

Posted

技术标签:

【中文标题】在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)【英文标题】:Make Additional Custom Checks in Email-Password Auth (Flutter - Firebase) 【发布时间】:2021-10-17 04:42:54 【问题描述】:

对于 Flutter-Firebase 移动应用程序,是否可以进行额外检查(在使用电子邮件/密码验证时),例如附加手机的 设备 ID 并拥有它检查 Firestore 数据库以确保登录时电子邮件设备的唯一性(以防止在具有相同电子邮件/密码的多个设备上运行相同的应用程序)。

当前登录方法 (https://firebase.flutter.dev/docs/auth/usage/) 仅接受电子邮件+密码,无法找到附加其他用户信息以进行身份​​验证的方法。

signInWithEmailAndPassword() 方法:

try 
  UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
    email: "barry.allen@example.com",
    password: "SuperSecretPassword!"
  );
 on FirebaseAuthException catch (e) 
  if (e.code == 'user-not-found') 
    print('No user found for that email.');
   else if (e.code == 'wrong-password') 
    print('Wrong password provided for that user.');
  

【问题讨论】:

【参考方案1】:

电子邮件密码验证仅需要电子邮件和密码来验证用户。如果您需要存储任何其他数据,则必须将它们存储在 Custom Claims 或任何数据库中。您可以根据需要阅读此信息。但是,用户仍然可以对应用程序进行反向工程并在没有额外检查的情况下登录,因为 Firebase 只需要电子邮件和密码,即使没有额外的身份验证扩展,它仍然可以工作。

每当用户登录时,您可以检查数据库中是否存在该用户帐户的任何会话,然后根据会话是否存在执行相关操作。

【讨论】:

同时检查Firebase auth login must allow single device login 谢谢,FlutterFire Docs 中没有提到 CustomClaims ......在后半部分你提到了 ''......因为 Firebase 只需要电子邮件和密码,它仍然可以工作没有额外的身份验证扩展。”这个声明是基于上面链接的问题还是来自个人经验?因为我计划实施这个并且在here 它说设备唯一性可以通过设备 ID 来实现。跨度> @starzar 这是事实。任何人都可以复制 signIn 方法并登录到您的应用程序。我已经使用 Firebase 身份验证处理此类自定义身份验证流程,在我们的案例中,我们有自己的身份验证层,例如自定义 cookie 或令牌,因此我们知道用户也通过我们的自定义身份验证登录,而不仅仅是 Firebase 以某种方式直接登录. 如果作为自定义声明与电子邮件+密码验证一起传递,这是否意味着“设备 ID 未得到验证”? @starzar 这是一种自定义方式。我无法提供具体信息,但用户已通过我们的服务器进行身份验证,然后使用 Custom Tokens 通过 Firebase 登录。所以它更像是一种自定义身份验证。

以上是关于在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)的主要内容,如果未能解决你的问题,请参考以下文章

使用 aws amplify cognito 的自定义身份验证流程

KeyCloak 中的自定义提供程序,可以根据用户名和密码进行身份验证

通过电子邮件/密码进行身份验证的颤振问题

通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查

从 django 中的自定义数据库表中检查电子邮件和密码

在解析服务器中禁用默认用户身份验证