Voi*_*d95 3 firebase firebase-authentication firebase-realtime-database google-cloud-functions
我有一个关于 Firebase 身份验证的问题。实际上,我正在为我的公司制作一个仪表板,并将它托管在 firebase 中。我想将电子邮件身份验证仅限于我的公司域(例如:cat.com)。但是我浏览了 stackoverflow 的答案,发现我可以在数据库中施加规则。但问题是我将使用 Firebase 函数调用外部数据库来获取数据并将其提供给网站(仪表板)。所以没有特定于域的规则将适用于那里。下面是我的仪表板架构的概要
我怎样才能做到这一点?我希望拥有“xxxx@cat.com”的人能够验证和查看仪表板数据
fru*_*kad 12
Firebase 的 Google 登录建立在普通的 Google 登录+大量自动化之上。其中包括在 GCP 中创建新的OAuth 2.0 客户端的部分。这将被命名Web client (auto created by Google Service)
此客户端自动链接到OAuth 同意屏幕,您可以在其中提及您的应用程序的显示名称,并将其限制为您组织中拥有 Google 帐户的用户
最简单的方法是立即通过本的回答中提到的firebase 后台身份验证触发器 立即检查组织电子邮件onCreate。如果该帐户不属于您的组织 - 立即将其删除。
这将暂时允许恶意用户访问您的系统。为了进一步保护,您可以为您的组织用户设置自定义声明(当他们注册时 - 在 firebase 功能中)并确保对 firestore/实时数据库的每个请求都检查了这些自定义声明。同样,您可以在调用数据库之前检查 firebase 函数中的自定义声明
在您的 Firebase 安全规则中只需粘贴此内容
这对我有用,我可以将登录的 Google 用户限制在我的组织域中
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.token.email.matches('.*@domain[.]com');
}
}
}
Run Code Online (Sandbox Code Playgroud)
案例 1:用户已经创建了他们的帐户,并且您希望将一项云功能限制为特定的电子邮件地址。
您可以获取与云函数调用关联的用户信息,并查看他们的电子邮件。如果外部数据库具有正确的电子邮件域,则您可以调用它们。您还应该进行一些 UI 更改,以便用户在没有@cat.com.
案例 2:将 Firebase 项目中的所有用户限制为包含@cat.com?
如果是这样,您不能直接在 firebase 身份验证中限制电子邮件,因此您必须将用户注册代码粘贴在云功能后面,在那里创建用户帐户。然后,您可以在他们尝试注册时查看他们的电子邮件。
您可以在云函数中使用 Firebase Admin SDK 执行此操作。文档
admin.auth().createUser({
email: 'user@example.com',
emailVerified: false,
phoneNumber: '+11234567890',
password: 'secretPassword',
displayName: 'John Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
disabled: false
})
.then(function(userRecord) {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
})
.catch(function(error) {
console.log('Error creating new user:', error);
});
Run Code Online (Sandbox Code Playgroud)
客户端将使用他们想要的电子邮件和密码调用云功能,在调用此之前.createUser,您可以在创建用户之前检查正确的电子邮件"dog@cat.com".toLowerCase().endsWith("cat.com")。
或者,您可以为@frunkad 提到的用户设置自定义声明:向使用“@cat.com”电子邮件注册的用户授予额外权限,如下所示:在用户创建时通过 Firebase 函数定义角色。但是,在 OP 的情况下,只有具有“@cat.com”的用户才能注册,因此自定义声明使问题过于复杂。
此外,使用电子邮件域作为访问控制的一种形式听起来也不是一个好主意。在帐户创建过程中,您可以根据电子邮件手动添加对用户文档的访问权限。当您想给某人发送电子邮件但不想让他们访问数据库时会发生什么?
| 归档时间: |
|
| 查看次数: |
4119 次 |
| 最近记录: |