在Rails中隐藏/修改ID

时间:2013-06-23 12:40:24

标签: ruby-on-rails activerecord e-commerce

Rails中是否有数字ID的替代品?

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

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

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

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

1 个答案:

答案 0 :(得分:4)

Here's a gem用16位UUID替换标准Rails ID。这些UUID是随机的,“实际上是独一无二的”(而不是绝对唯一的),因为它们极不可能是重复的。

此外,UUID主键支持为built in to Rails 4

除了使ID的实际数量无关,以便竞争对手无法统计您的发票等,由于其通用唯一性,UUID还可用于更轻松地组合分布式数据库。

  

每当注册时,他都可以在URL中看到他的帐户的ID。以同样的方式,当一个人下订单时,他可以在URL中看到他的订单的ID。

这通常是一种不好的做法,而且不仅仅是因为你陈述的原因。长数字在各方面都是用户不友好的,例如难以记忆,类型等。使用UUID会使这些问题变得更糟,因为它们会更长。

处理此问题的一种方法是创建自己唯一的ID,这些ID也不是主键。例如,您可以随机为新帐户或订单选择一个ID,然后重新搜索,直到找到可以保存的唯一ID。然后使用该数字作为显示&查找这些表的ID。

一个巧妙的技巧是将得到的数字编码为更高的数字,以便它们更短,例如如果你想要一个1000万ID的池:

 rand(10000000).to_s(36)
 => "4s2w1"