现在当我点击id为1的用户,URL栏上的如何加密或隐藏url栏上的用户ID? rails4
用户/ 1
我想将其更改为
用户/ [加密]
或
users/some_user
有没有办法在rails上做到这一点?
现在当我点击id为1的用户,URL栏上的如何加密或隐藏url栏上的用户ID? rails4
用户/ 1
我想将其更改为
用户/ [加密]
或
users/some_user
有没有办法在rails上做到这一点?
如何使用永久链接而不是用户ID?即用户/ [永久链接]和可以配置永久链接任何你喜欢的,只要它是一个唯一的值
结帐的friendly_id宝石:https://github.com/norman/friendly_id
使用随机(或伪随机)生成的唯一ID(friendly_id可以让你轻松做到)是我想的方法,如果你不想让人们能够猜测用户ID(这是我认为你所有你的数据库关联仍然会使用id,这只是使用随机查找slug的url。 – 2015-02-10 16:06:09
是的,我想隐藏user_id – 2015-02-11 06:56:11
Rails使用to_param
方法在URL显示对象时。
如果更改to_param
方法user
它将用于显示数据而不是id
。
默认情况下,rails已经实现to_param
来返回对象的id
。
例如
class User < ActiveRecord::Base
...
def to_param
"#{self.first_name}-#{self.last_name}" # or whatever you want to use
end
...
end
在你的网址,你将有/users/first_name-last_name
或任何你to_param
方法返回。默认to_param
返回id
和在url
你得到/users/4
。并在您的控制器中可以找到user
和id
4,但是当您更改to_param
方法时,必须分别更改从数据库中获取用户的方式。
例如: 我更改我的to_param
方法从数据库返回nick_name
,它对于特定用户是唯一的,我可以使用它从数据库中查找用户。 在路由器
变化为params
get 'users/:nick_name', 'users#show'
在控制器
User.find_by :nick_name => params[:nick_name]
好吧,当我在用户中添加此方法时模型,我得到一个错误“无法找到用户与'ID'=一些用户”,无论如何修复? – 2015-02-11 06:55:19
你需要独特的价值与'to_param'方法返回,因为你会用它来找到用户在数据库。现在你的路由是'/ users/some-user',但是如何确定哪个用户是谁,你需要一些独特的参数来链接到特定的用户 – Nermin 2015-02-11 08:08:13
现在我很困惑QQ – 2015-02-11 09:33:24
其他人一样在这个帖子里说,我使用 映射我使用 https://github.com/norman/friendly_id这样:
# app/models/secret.rb; this would go in the model you want to obfuscate
class Secret < ActiveRecord::Base
has_friendly_id :code, :use_slug => true
validates :name, :uniqueness => true
def code
Digest::SHA1.hexdigest self.name
end
end
很简单。如果你的安全需求是严重的,你可能会想要一些更复杂的东西(更不用说比基本的混淆技术更分层了),但我想分享一个开箱即用的方式来使用已存在的gem (甚至可能已经在您的应用程序中使用)
您想要用户能够查看其他用户吗? – 2015-02-10 15:45:25