Rails 中有没有数字 ID 的替代品?
我有一个电子商务网络应用程序。每当注册时,他都可以在 URL 中看到他的帐户 ID。同样的,当一个人下单时,他可以在 URL 中看到他的订单的 ID。
因此,竞争对手可以轻松访问有关应用程序性能的关键信息。(这已经引起了问题。)如何对用户隐藏信息?
我正在考虑将所有 ID 增加一个巨大的数字,但是仍然可以在一段时间内衡量性能。此外,我还必须修改所有相关表。
有没有办法对ID进行编码?或者也许以某种方式随机化它?
Rails 中有没有数字 ID 的替代品?
我有一个电子商务网络应用程序。每当注册时,他都可以在 URL 中看到他的帐户 ID。同样的,当一个人下单时,他可以在 URL 中看到他的订单的 ID。
因此,竞争对手可以轻松访问有关应用程序性能的关键信息。(这已经引起了问题。)如何对用户隐藏信息?
我正在考虑将所有 ID 增加一个巨大的数字,但是仍然可以在一段时间内衡量性能。此外,我还必须修改所有相关表。
有没有办法对ID进行编码?或者也许以某种方式随机化它?
这是一个用 16 位 UUID 替换标准 Rails id 的 gem。这些 UUID 是随机的并且“实际上是唯一的”(而不是绝对唯一的),因为它们极不可能是重复的。
此外, Rails 4 内置了UUID 主键支持。
除了使 ID 的实际数量无关紧要,以便竞争对手无法计算您的发票等之外,由于它们的普遍唯一性,UUID 还用于更容易组合分布式数据库。
每当注册时,他都可以在 URL 中看到他的帐户 ID。同样的,当一个人下订单时,他可以在 URL 中看到他的订单 ID。
这通常是一种不好的做法,不仅仅是因为您陈述的原因。长数字在各种方面对用户不友好,例如难以记住、难以键入等。使用 UUID 会使这些问题变得更糟,因为它们要长得多。
处理此问题的一种方法是创建您自己的唯一 ID,这些 ID 也不是主键。例如,您可以为新帐户或订单随机选择一个 ID,然后重新选择,直到找到一个可以保存的唯一 ID。然后使用该数字作为这些表的显示和查找 ID。
一个巧妙的技巧是将生成的数字编码为更高的基数,以便它们更短,例如,如果你想要一个包含 1000 万个 ID 的池:
rand(10000000).to_s(36)
=> "4s2w1"