仅限 Firebase 身份验证管理员登录

时间:2021-07-09 11:07:58

标签: firebase flutter firebase-authentication

我正在构建两个将使用同一个 Firebase 项目的 Flutter 应用。

第一个应用程序是公开的,供用户在允许的访问规则范围内创建帐户、登录和使用应用程序。

第二个是管理员批准用户帖子。

您必须登录才能使用这两个应用程序。第一个任何人都可以创建一个帐户并登录。管理员也可以使用相同的管理员帐户登录。但是只有第二个管理员用户应该能够登录。我正在通过访问规则强制执行安全性。但是我首先需要第二个管理员应用程序来拒绝非管理员用户登录。所以我不能简单地创建一个集合并将管理员用户 UID 放入其中。

如何区分普通用户和管理员用户,最重要的是如何利用这种区分来禁止非管理员用户登录管理员应用?

目前用于登录,我只是在使用

FirebaseAuth.instance
        .signInWithEmailAndPassword(email: email, password: password);

我读到了一个叫做用户声明的东西,但似乎没有办法在仪表板中修改它,也没有办法通过上面的代码指定某种条件。

我希望这足够有意义。

谢谢大家

1 个答案:

答案 0 :(得分:1)

您无法阻止任何人登录您的应用程序。您能做的最好的事情是检查用户是否是管理员。如果是,请继续否则强制注销它们。您可以使用 Firebase Custom Claims 添加管理员用户,甚至可以将他们的 UID 存储在 Firestore 或实时数据库中。

UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
  email: "barry.allen@example.com",
  password: "SuperSecretPassword!"
);

// Check for claims here
if (admin) { 
  //...
} else {
  await FirebaseAuth.instance.signOut();
  // or just show alert that user is not an admin
}

您可以使用 getIdTokenResult 方法获取用户的自定义声明。 This answer 解释了如何在 Flutter 中验证自定义声明。