Как скрыть: id в рельсах url? - PullRequest
       27

Как скрыть: id в рельсах url?

0 голосов
/ 24 октября 2018

У меня есть эти вложенные маршруты, и я хочу скрыть параметр 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.Я не уверен, представляет ли это потенциальное нарушение безопасности, и мои тесты, кажется, работают нормально, поэтому я думаю, что все будет в порядке, если я найду способ скрыть эту часть идентификатора URL?

Или мой вариант использования для вложенных маршрутов неверен?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

У вас есть набор возможных решений:

  1. Как уже упоминалось, вы можете преобразовать идентификаторы во что-то вроде слизняка или чего-то еще, о чем упоминал другой ответ:https://github.com/norman/friendly_id

  2. Вы можете сохранить идентификаторы выбранных объектов в файлах cookie сеанса.Таким образом, клиент по-прежнему отправляет соответствующие данные, но на самом деле они не отображаются в URL.

  3. Вы можете иметь эфемерную таблицу Transaction, в которой вы можете хранитьпервый объект и второй объект.Таким образом, маршруты будут обрабатывать транзакции_id, в то время как first_object_id и second_object_id абстрагируются в таблице.Это также позволит вам хранить другие метаданные, связанные с транзакцией или торговым процессом.

  4. Вы можете создать отдельную конечную точку, не связанную с контроллером shares, где вы можете принять два(необязательно) параметры запроса: /sharetransaction/trade?first_object_id=113&second_object_id=106.Таким образом, URL отражает то, что происходит на самом деле, а не изменяет идентификаторы в середине без видимой причины.

Подход, который вы выберете, зависит от вашего варианта использования.

0 голосов
/ 24 октября 2018

gem 'friendly_id' позволяет создавать красивые URL-адреса и работать с удобными для человека строками, как если бы они были числовыми идентификаторами.

https://github.com/norman/friendly_id

...