1

Rails 中有没有数字 ID 的替代品?

我有一个电子商务网络应用程序。每当注册时,他都可以在 URL 中看到他的帐户 ID。同样的,当一个人下单时,他可以在 URL 中看到他的订单的 ID。

因此,竞争对手可以轻松访问有关应用程序性能的关键信息。(这已经引起了问题。)如何对用户隐藏信息?

我正在考虑将所有 ID 增加一个巨大的数字,但是仍然可以在一段时间内衡量性能。此外,我还必须修改所有相关表。

有没有办法对ID进行编码?或者也许以某种方式随机化它?

4

1 回答 1

4

这是一个用 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"
于 2013-06-23T13:15:44.640 回答