如何防止 Firebase 上的匿名密钥?

Posted

技术标签:

【中文标题】如何防止 Firebase 上的匿名密钥?【英文标题】:How to prevent anonymous keys on Firebase? 【发布时间】:2022-01-10 18:17:27 【问题描述】:

我正在 Raspberry PI 3、Openelec OS 平台上开发一个聊天项目。

尝试写入数据库并获取不需要的匿名密钥。

用黄色标记的不需要的键。 Movie2 它的键和值是想要的结果,但我是手动完成的。

我只问如何防止这个匿名随机密钥出现,如何用其他密钥替换它? (字符串,例如电影名称)

这是我的代码:

url = 'https://chat-example-97c62.firebaseio.com/Movie1.json'
postdata = 
    'date': str(time.asctime( time.localtime(time.time()) )),
    'temp': str("Hello from Kodi")
 
req = urllib2.Request(url)
req.add_header('Content-Type','application/json')
data = json.dumps(postdata)

谢谢。

【问题讨论】:

为确保数据符合您想要的架构,您可以在数据库的安全规则中编写.validate 子句。有关这方面的更多信息,请参阅:firebase.google.com/docs/database/security @FrankvanPuffelen 好的,这正在验证。但是我如何在没有匿名密钥的情况下写入数据库呢?例如,对于图片中的键 Movie1,我只想拥有键日期、用户名及其值。没有 KbBDD4QDDiZn3it6r8m 【参考方案1】:

当你向 Firebase 发送 POST 请求时,它会自动生成一个密钥(Anonymous Key),如果你想使用自己的密钥需要使用 PATCH 请求,这是 Python 3 上的一个示例:

def update_entry(user, message):

    my_data = dict()
    my_data["user"] = user
    my_data["message"] = message

    json_data = json.dumps(my_data).encode()
    request = urllib.requests.Request("https://<YOUR-PROJECT-ID>.firebaseio.com/movies/<REPLACE_THIS_WITH_YOUR_DESIRED_KEY>.json", data=json_data, method="PATCH")

    try:
        loader = urllib.request.urlopen(request)
    except urllib.error.URLError as e:
        message = json.loads(e.read())
        print(message["error"])
    else:
        print(loader.read())

【讨论】:

以上是关于如何防止 Firebase 上的匿名密钥?的主要内容,如果未能解决你的问题,请参考以下文章

用于 Firebase 实时数据库/Firebase 身份验证的 Android 唯一密钥

在 iOS 上使用基于时间的密钥更新 firebase 数据库

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

使用生成的密钥插入 Firebase

如何在 Fire Base 中使用完成处理程序

如何解决颤振上的 pod install 错误?