現在當我點擊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