Zim*_*Zim 17 firebase firebase-authentication firebase-realtime-database
我使用firebase.auth().signInWithEmailAndPassword创建了一些用户,并希望立即停止signUp,但保持signIn工作.我尝试了一些关于用户的规则,甚至根本不再写入firebase.但是仍然可以进行注册.在控制台中禁用电子邮件/密码也会禁用登录.
{
"rules": {
".read": true,
".write": false,
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何将安全规则应用于Firebase 3中的用户的任何想法?
Fra*_*len 33
Firebase明确地将身份验证(登录到应用程序)与授权(从应用程序访问数据库或存储资源)分开.
您无法在不禁用所有用户登录的情况下禁用注册,这不是您想要的.
在典型情况下,开发人员将根据经过身份验证的用户开始保护数据库/文件访问.请参阅数据库安全性和存储安全性文档中的相关部分.
如果您的用例是您只希望特定用户具有访问权限,则您可能希望实现白名单:允许访问数据的用户列表.
您可以在安全规则中执行此操作:
{
"rules": {
".read": "auth.uid == '123abc' || auth.uid == 'def456'",
".write": false,
}
}
Run Code Online (Sandbox Code Playgroud)
或者(更好)将允许的uid列表放在数据库中并引用安全规则中的uid:
"allowedUids": {
"123abc": true,
"def456": true
}
Run Code Online (Sandbox Code Playgroud)
然后:
{
"rules": {
".read": "root.child('allowedUids').child(auth.uid).exists()",
".write": false,
}
}
Run Code Online (Sandbox Code Playgroud)
Dha*_*raj 25
更新:现在可以直接从 Firebase 控制台禁用注册和帐户删除。
如果启用Cloud Identity API,则可以禁用用户的注册和删除帐户操作,并将其限制为Admin SDK。
您可以访问https://console.cloud.google.com/customer-identity/settings来禁用它们。
在现有项目上启用 API 时,您可能会收到此通知:
一旦禁用,使用该createUserWithEmailAndPassword方法会返回 400 错误:
{
"error": {
"code": 400,
"message": "ADMIN_ONLY_OPERATION",
"errors": [
{
"message": "ADMIN_ONLY_OPERATION",
"domain": "global",
"reason": "invalid"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然可以使用 Admin SDK 创建新用户。
可以在此处找到相同的文档
好了,问问题已经有好几天了,但是对于那些仍然想知道答案的人来说,这可能会有所帮助,我们仍然不能简单地禁用新帐户的创建,但是我们可以使用Firebase函数:
这是使用云功能自动禁用新用户的解决方法。
const admin = require("firebase-admin");
exports.blockSignup = functions.auth.user().onCreate(event => {
return admin.auth().updateUser(event.uid, { disabled: true })
.then(userRecord => console.log( "Auto blocked user", userRecord.toJSON() ))
.catch(error => console.log( "Error auto blocking:", error ));
});
Run Code Online (Sandbox Code Playgroud)
请记住,当您使用Firebase Web控制台或第三方创建用户时会触发此功能。因此,您必须创建,等待功能,然后启用用户。
如果要从FirebaseUIAndroid 应用程序中删除注册选项,则必须添加以下提供程序:
new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());
Run Code Online (Sandbox Code Playgroud)
该函数将如下所示:
private void FireBaseLoginUI() {
List<AuthUI.IdpConfig> providers = Collections.singletonList(
new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setLogo(R.drawable.app_logo)
.setTheme(R.style.AuthUITheme)
.build(),
RC_SIGN_IN);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9221 次 |
| 最近记录: |