代码之家  ›  专栏  ›  技术社区  ›  calyxofheld

如何在rails url中隐藏:id?

  •  -2
  • calyxofheld  · 技术社区  · 7 年前

    我有这些嵌套的路由,我想隐藏 id url中的参数。

    resources :shares, only: [:index, :create, :update] do 
      resource :wizard, path: "trade" do
        get :first_object
        get :second_object
        get :confirmation
        post :validate_step
      end
    end
    

    form_for 上面看起来是这样的:

    <%= form_for [@object, @trade_wizard], as: :trade_wizard, url: validate_step_share_wizard_path(@object) do |f| %>
    

    所以用户添加 first_object 并重定向到以下url: /shares/113/trade/second_object . 添加后 second_object /shares/106/trade/confirmation . 我不确定这是否意味着一个潜在的安全违规,我的测试似乎工作得很好,所以我想应该是好的,如果我找到一些方法来隐藏的网址id部分?

    或者我的嵌套路由用例不正确?

    2 回复  |  直到 7 年前
        1
  •  2
  •   shashwat    7 年前

    您有一套可能的解决方案:

    1. 如前所述,您可以将id转换为类似slug或其他的东西,这就是另一个答案所提到的: https://github.com/norman/friendly_id

    2. 您可以在会话cookie中存储选定对象的ID。这样,客户机仍在发送相关数据,但它并没有真正出现在URL中。

    3. 你可以有一个短暂的 Transaction

    4. 您可以创建一个不与 shares 控制器,其中可以接受两个(可选)查询参数: /sharetransaction/trade?first_object_id=113&second_object_id=106

    您选择的方法取决于您的用例。

        2
  •  2
  •   Saqib Shahzad zschleien    7 年前

    gem 'friendly_id' 允许您创建漂亮的URL,并使用人性化的字符串,就像它们是数字ID一样。

    https://github.com/norman/friendly_id

    推荐文章