Firebase:如何为密钥生成唯一的数字ID?

Iva*_*ang 51 identity push unique firebase

我需要数字ID才能实现人类可读性.如何在Firebase中获取它?

我想要键的数字ID,例如"000000001","000000002","00000003","00000004".

我需要它的原因是因为这些ID将成为在线和离线的永久对象ID.我希望用户只需输入URL"/ objects/00000001"即可浏览该对象页面.

我在这里问,因为我想知道这是否可以在不使用.priority子属性等的情况下完成.我想set方法可以以某种方式完成.如果不可能,请告诉我不,我可以接受这个答案.

Sin*_*lel 69

我建议您阅读Firebase文档.具体来说,请参阅Firebase JavaScript Web指南的" 保存数据"部分.

从指南:

获取push()生成的唯一ID

调用push()将返回对新数据路径的引用,您可以使用该路径获取其ID的值或将数据设置为它.以下代码将生成与上述示例相同的数据,但现在我们可以访问生成的唯一推送ID

// Generate a reference to a new location and add some data using push()
var newPostRef = postsRef.push({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});
// Get the unique ID generated by push() by accessing its key
var postID = newPostRef.key;
Run Code Online (Sandbox Code Playgroud)

资料来源:https://www.firebase.com/docs/web/guide/saving-data.html

  • push生成一个新的数据路径,其服务器时间戳为key.这些键看起来像-JiGh_31GA20JabpZBfa,所以不是数字.
  • 如果您想创建一个只有数字的ID,您可以将该参数作为对象的参数,以避免覆盖生成的键.
    • 密钥(新数据的路径)保证是唯一的,因此用数字密钥覆盖密钥是没有意义的.
    • 您可以将数字ID设置为对象的子项.
    • 然后,您可以使用Firebase查询通过该ID子查询对象.

从指南:

在JavaScript中,调用push()然后立即调用set()的模式非常常见,我们允许您通过将要直接设置的数据传递给push()来组合它们,如下所示.以下两个写入操作都将导致将相同的数据保存到Firebase:

// These two methods are equivalent
postsRef.push().set({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});
postsRef.push({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});
Run Code Online (Sandbox Code Playgroud)

资料来源:https://www.firebase.com/docs/web/guide/saving-data.html

  • 似乎`newPostRef.key()`不再有效......`newPostRef.key`确实返回了生成的密钥.看起来它直接绑定到属性而不是从名为`key()`的函数返回. (6认同)

hta*_*oya 6

如上所述,您可以使用Firebase默认推送ID.

如果你想要一些数字,你可以根据时间戳做一些事情来避免碰撞

基于日期,小时,秒,ms以及最后的一些随机int的东西

01612061353136799031
Run Code Online (Sandbox Code Playgroud)

这意味着:

016-12-06 13:53:13:679 9031
Run Code Online (Sandbox Code Playgroud)

这一切都取决于您需要的精确度(社会安全号码与日期末的一些随机字符相同).就像白天,小时或秒钟预计会有多少交易一样.您可能希望降低精度以便于键入.

您还可以执行增加数字ID的事务,并且在成功时,您将为该用户提供唯一的连续编号.这些可以在客户端或服务器端完成.

(https://firebase.google.com/docs/database/android/read-and-write)

  • @ T9b秘密ID并不总是必须的,以Facebook为例,你可以简单地开始输入整数来获取用户资料(MZ为4).但你无法用这些数据做更多的事情. (3认同)
  • 这不是一种安全的方法,因为可以通过简单地循环遍历所有可能的值来进行冲突.push方法产生的哈希可能更好,虽然我不知道使用了什么算法. (2认同)