Ruby on Rails中受保护的共享链接
我正在寻找一种方法来创建和共享Rails视图的受保护链接。
在我的应用程序中,用户可以创建项目页面。 我想让用户创建共享链接,以便只有具有该链接的收件人才能访问该项目页面并在该页面上留下评论。 我甚至可能想为链接添加密码保护。
那有gem吗?
我不知道保护链接的任何gem,我可以想象很难找到这样一个单独function的共同点。
但是,这是我如何实现这样一个系统。 基本思想是用一个实际上“不可饶恕”的token
替换id。
1 – 为要保护的资源创建token
列( index: true
, unique: true
)
2 – 在模型中,添加validation,生成器,回调和覆盖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
作为url参数
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)
将返回一个你可以安全分享的url:
http://example.com/things/KSwdmTuDSVOGLTHtjK-RU78x7Bme_g-noTrNcovrtXioxPletLvNK35ia_F8CpIBtNDv-_xQ5bZ8uuv18msD4w
当然,你需要分别用你的模型名称替换thing
和Thing
。