我正在开发一个Rails应用程序,用户无需注册即可添加帖子。我想生成一个随机的唯一键,并提供编辑其帖子的链接,例如:http://mygreatapp.com/post/edit/f7smSDf34Sad。 Craigslist使用了类似的方法。
我的想法是在创建帖子时生成一个随机的唯一字符串,并将其与其他帖子数据一起保存在数据库中。然后检查数据库中的字符串是否与请求中的字符串匹配。解决方案安全吗?
你会如何实现它?
编辑:感谢您的回复。但是,生成随机字符串不是问题。我担心数据库中的安全和实施。
答案 0 :(得分:1)
如果我要实现这个,我将使用friendly_id gem,因为你基本上正在为数据库中的每条记录创建一个独特的slug。 friendly_id默认情况下会使用一列来创建slug。您可以告诉friendly_id使用id
列,然后覆盖其normalize_friendly_id
方法。
在该方法中,您将生成一个唯一的字符串,然后将其返回。此方法返回的文本是friendly_id将用于生成slug的文本。
要生成slug,您只需使用MD5哈希,或者可以执行this之类的操作:
(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
使用这种方法而不是简单地创建/存储slug的好处是你不必执行Post::find_by_slug(slug)
,你仍然可以使用Post::find(slug)
因为friendly_id处理查找记录slu。。
有Railscasts episode覆盖了friendly_id gem
答案 1 :(得分:0)
我在我的应用程序中使用类似的东西(to_param由您的控制器/视图调用以生成路径)
class Post < AR::Base
def to_param
Digest::SHA1.hexdigest("--#{self.if}--#{self.created_at}--")
end
end
唯一的问题是SHA1生成长字符串。您可以使用MD5代替......