2012-03-03 37 views

回答

4

您可以创建随机数和基36编码它们,简单的东西是这样的:

rand(1e12).to_s(36) 

生成一个用于在第一次使用的每个用户,并将其与用户存储。在您的随机标记(在您的模型和数据库中)上添加一个唯一约束,如果您违反唯一性,则生成一个新约束。如果您需要尝试五次以上才能获得唯一值,您可能需要在某处记录警告,如果您开始收到很多警告,那么请将1e12上限为1e15(或更高)。

这会给你一个随机的令牌附加到每个用户,令牌将是URL安全的,他们快速和容易产生,你不应该得到那么多的碰撞,并且它会很容易回溯从令牌到用户。

0

一种方法是使用用户的唯一标识符,说“ID”,这是在数据库中,而这也是危险的,因为你透露太多有关数据库。

所以你可以添加一个扭曲到以前的情况,加密和解密的ID,这样当它在URL中它被加密,然后当你收到它,你可以解密和使用它。

+0

你怎么可以做一个加密解密,并保持其结果短期,6个字符? – AnApprentice 2012-03-03 01:39:04

0

正如cjapes所说,使用ID并不是一个好的解决方案,亩太短的答案对于大多数情况是很好的。但是,如果您有一个提供虚荣URL的网站,例如about.me,那么每个用户将拥有一个永久链接类型的列,用于存储其虚荣URL。构建URL时,您可以使用该列中的值。

在接收端,你可以这样做:

@referring_friend = User.find_by_permalink(params[:permalink]) 
相关问题