您可以从Firebase阵列密钥获取时间戳吗?

lowe0292

根据此博客文章,firebase数组键是使用时间戳创建的:

它通过基于当前时间戳(与服务器时间匹配的偏移量)分配一个永久的唯一ID来实现此目的。

给定密钥,是否有办法恢复此时间戳以供以后使用?

弗兰克·范普菲伦

正如我在评论中所说,您不应该依赖于从生成的ID解码时间戳。取而代之的是,您只需将其存储在Firebase中的属性中即可。

也就是说,事实证明,将时间戳取回很容易:

// DO NOT USE THIS CODE IN PRODUCTION AS IT DEPENDS ON AN INTERNAL 
// IMPLEMENTATION DETAIL OF FIREBASE
var PUSH_CHARS = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
function decode(id) {
  id = id.substring(0,8);
  var timestamp = 0;
  for (var i=0; i < id.length; i++) {
    var c = id.charAt(i);
    timestamp = timestamp * 64 + PUSH_CHARS.indexOf(c);
  }
  return timestamp;
}
var key = prompt("Enter Firebase push ID");
if (key) {
  var timestamp = decode(key);
  console.log(timestamp+"\n"+new Date(timestamp));
  alert(timestamp+"\n"+new Date(timestamp));
}

我会重复我的评论,以防万一有人认为将此代码用于除逆向工程中的练习以外的其他任何用途是一个好主意:

即使您知道如何从密钥中检索时间戳,在生产代码中执行此操作也是一个坏主意。时间戳用于生成唯一的,按时间顺序排列的序列。如果Firebase的某个人想出了一种更有效的方法(无论是他们偶然选择的效率的主观定义),都可以实现的算法push如果您的代码需要时间戳,则应将时间戳添加到数据中。不依赖于它成为密钥的一部分。

更新资料

Firebase记录了Firebase推送ID背后的算法但是上述建议仍然存在:请勿将其用作存储日期的替代方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您可以将时间戳转换为FieldValue吗?

我可以从FoundationDB版本时间戳获取时间戳吗?

您可以在tcsh上更改历史记录命令的时间戳格式吗

您可以在不“签名”的情况下向 PDF 添加带时间戳的防篡改吗?

您可以从SqlDataReader获取列名吗?

您可以获取“此处文档”吗?

如果API密钥已加密,您可以发送吗?

我可以禁止mysqldump的时间戳吗?

tcpdump可以按时间戳过滤吗?

可以很容易地在客户端代码中篡改Firebase的“时间戳”值吗?

您可以直接从3D阵列列表中删除1D阵列列表吗?

Firebase 获取服务器时间戳

Firebase按时间戳获取数据

在 firebase 文档中添加时间戳 insteard 自动生成的密钥

Firebase时间戳作为自定义密钥

您可以在熊猫中拆分日期时间月份吗?

您可以在Python中使用日期时间求和吗?

您可以在pygame中执行特定时间的操作吗

给定〜/ .ssh / authorized_keys格式的密钥,您可以轻松确定密钥强度吗?

您可以使用IAP登录到Firebase吗?

您可以读取firebase函数的HttpsError状态吗?

(如何)您可以将用户从 firebase 中注销吗?

datejs:我可以获取下一个星期一并注入时间戳吗?

您可以限制用户可以在Azure Key Vault中访问哪些密钥/秘密吗?

您可以从gltf文件中获取明确的框架吗?

您可以获取CombinedGeometry或GeometryGroup对象的路径标记语法吗?

您可以获取通过其调用函数的属性名称吗?

您可以从StreamReader对象获取文件路径吗?

您可以在 dask 阵列上使用 dask_ml kmeans 吗?