Ruby on Rails中受保护的共享链接

时间:2014-08-05 07:47:39

标签: ruby-on-rails ruby

我正在寻找一种创建和共享Rails视图的受保护链接的方法。

在我的应用程序中,用户可以创建项目页面。我想让用户创建共享链接,以便只有具有该链接的收件人才能访问该项目页面并在该页面上留下评论。我甚至可能想为链接添加密码保护。

那有宝石吗?

1 个答案:

答案 0 :(得分:12)

我不知道保护链接的任何宝石,我可以想象很难找到这样一个单独功能的共同点。

但是,这是我如何实现这样一个系统。基本的想法是用一个实际的" untuessable"替换id。 token

1 - 为您要保护的资源创建token列(index: trueunique: 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

当然,您需要分别将thingThing替换为您的型号名称。