我正在寻找一种创建和共享Rails视图的受保护链接的方法。
在我的应用程序中,用户可以创建项目页面。我想让用户创建共享链接,以便只有具有该链接的收件人才能访问该项目页面并在该页面上留下评论。我甚至可能想为链接添加密码保护。
那有宝石吗?
答案 0 :(得分:12)
我不知道保护链接的任何宝石,我可以想象很难找到这样一个单独功能的共同点。
但是,这是我如何实现这样一个系统。基本的想法是用一个实际的" untuessable"替换id。 token
。
1 - 为您要保护的资源创建token
列(index: true
,unique: true
)
2 - 在模型中,添加验证,生成器,回调和覆盖to_param
validates :token, presence: true
validates :token, uniqueness: true
before_validation :generate_token, on: :create
def generate_token
begin
self.token = SecureRandom.urlsafe_base64(64, false)
end while self.class.find_by(token: token)
end
def to_param
token
end
3 - 更改路线以使用:token
作为网址参数
resources :things, param: :token
4 - 将控制器更改为通过令牌而不是ID
进行查找@thing = Thing.find(params[:id]) # change this
@thing = Thing.find_by(token: params[:token]) # to this
现在,thing_url(@thing)
将返回一个您可以安全分享的网址:
http://example.com/things/KSwdmTuDSVOGLTHtjK-RU78x7Bme_g-noTrNcovrtXioxPletLvNK35ia_F8CpIBtNDv-_xQ5bZ8uuv18msD4w
当然,您需要分别将thing
和Thing
替换为您的型号名称。