我工作的Rails应用程序,用户可以添加信息而无需注册。 我想生成一个随机的唯一密钥,并提供链接编辑他们的岗位,例如: http://mygreatapp.com/post/edit/f7smSDf34Sad 。 类似的方法是通过Craigslist的使用。
我的想法是对生成后创建一个随机的,唯一的字符串,并将其保存在数据库中,与其他职位数据一起。 然后检查是否在数据库中的字符串相匹配的的请求。 是解决安全吗?
你将如何实现呢?
编辑:感谢您的答复。 然而,生成随机字符串不是问题。 安全和实现数据库是我所关注。
如果我要实现这一点,我会用friendly_id因为你基本上做的是建立在你的数据库的每个记录的唯一塞什么宝石。 friendly_id在默认情况下将使用列创建蛞蝓。 你可以告诉friendly_id使用id
列,然后覆盖其normalize_friendly_id
方法。
在这种方法中,您将生成一个唯一的字符串,然后返回。 由该方法返回的文本是什么friendly_id将用来生成蛞蝓。
要生成蛞蝓,你可以简单地使用MD5哈希或者你可以做一些像这样 :
(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
使用这种方法,而不是简单地创建/存储自己塞的好处是,你不必做Post::find_by_slug(slug)
,你仍然可以使用Post::find(slug)
,因为friendly_id处理查找记录由塞。
有一个Railscasts插曲覆盖friendly_id宝石
我用类似的东西在我的应用程序(to_param是由你的控制器/视图调用来生成路由)
class Post < AR::Base
def to_param
Digest::SHA1.hexdigest("--#{self.if}--#{self.created_at}--")
end
end
唯一的问题是,SHA1产生长的字符串。 您可以使用MD5,而不是...