gpt4 book ai didi

ios - 由于 Firebase 规则而阻止使用唯一用户名

转载 作者:行者123 更新时间:2023-11-30 11:52:28 25 4
gpt4 key购买 nike

因此,在我当前的 iOS 应用程序中,我正在使用 firebase,并且目前正在尝试使所有用户在注册阶段都拥有唯一的用户名。我的这个函数似乎可以检查用户名是否存在。

//will ensure that a user has a unique username
static func checkUserNameAlreadyExist(newUserName: String, completion: @escaping(Bool) -> Void) {
let ref = Database.database().reference()
ref.child("users").queryOrdered(byChild: "username").queryEqual(toValue: newUserName)
.observeSingleEvent(of: .value, with: {(snapshot: DataSnapshot) in
if snapshot.exists() {
completion(true)
}
else {
completion(false)
}
})
}

但是,当我尝试在注册屏幕中创建用户时运行此功能时。它不执行此操作并给出此错误

Listener at /users failed: permission_denied

我得出的结论是,这与我当前的默认规则有关。

{
"rules": {
".read": "auth != null",
".write": "auth != null",
".indexOn": "g"
}
}

所以我的问题是...我是否可以更改我的规则来使用此功能,因为我不想在检查用户名是否唯一之前对用户进行身份验证。如果许多用户名被盗用,这可能会增加数千人的身份验证。非常感谢任何帮助

最佳答案

这里有很多潜在的解决方案。以下是我的一些想法:

  1. 您可以允许任何人阅读您的用户文档。如果其中没有任何敏感信息,那么允许这样做可能是有意义的,尽管您要求用户至少经过身份验证可能是正确的。

这个解决方案看起来像这样:

{
"rules": {
"users": {
".read": true,
".write": "auth != null"
}
}
}
  • 用户是否通过电子邮件或 Facebook 等方式登录?如果是这样,您可以让他们进行身份验证,然后在他们通过身份验证后,您要求他们选择一个用户名,此时他们就可以查询 users 文档以获取有效的用户名。
  • 此处不需要示例代码,就好像您在调用问题中的函数之前等待用户进行身份验证一样,该函数此时将起作用。然后,您只需在 users 文档中更新该用户的 username 键即可。

  • 您可以维护一个单独的文档来跟踪所使用的用户名,并使该文档可供所有人阅读。这样,未经身份验证的用户可以检查他们的用户名,但他们无权访问 Firebase 数据库的任何其他部分。
  • 要执行此操作,您必须创建一个新文档(我们将其称为用户名),每次用户成功通过身份验证时,您都将其添加到用户 文档,并将其用户名添加到 username 文档中。然后,您可以像我的第一个示例中那样设置用户名的权限:

    {
    "rules": {
    "usernames": {
    ".read": true,
    ".write": "auth != null"
    }
    }
    }

    关于ios - 由于 Firebase 规则而阻止使用唯一用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com