Ruby: отключить массовое использование ссылки - PullRequest
0 голосов
/ 30 мая 2018

Так что вот ссылка http://127.0.0.1:3000/zones/create_value_zone_printout?value_zone=3-0010000-001, она может использоваться массово (повторяется) всегда, мне нужно исправить это и выключить.Что я имею в виду под этим?Ссылка должна работать только при нажатии на кнопку, не заходя в браузер.Может быть, попытаться зашифровать ссылку?Может быть, у кого-то есть идеи?

  def create_value_zone_printout
    @service = "value_zones"

    if !public_user?
      return unless check_service_permissions
    end

    respond_to do |format|
      format.html do
        rep_id = Report.get_printout_file_id('VALUE_ZONE', session, {:value_zones => params[:value_zone]})
        unless rep_id.blank? or rep_id.is_a?(Array)
          return permission_denied(SilentError.new("Kļūda veidojot izdruku!", rep_id.to_s, true))
        end
        add_service_to_user_orders(nil, [params[:value_zone]], rep_id) unless public_user?

        file_data = Attachment.find_by_id(rep_id.first.keys.first)
        send_data(file_data.data_buffered, :filename => file_data.file_name)

        file_data.destroy if public_user?
      end
    end
  end

  map.resources :zones, :collection => {:create_value_zone_printout => :get}


<%= link_to 'sagatavot izdruku',  {:controller => "zones", :action => "create_value_zone_printout", :value_zone => @zone.zone_name}, :class=>"print" %>

PS Только ссылка value_zone меняется в ссылке для каждой позиции, может быть, просто установить только 1 запрос на значение_зоны?Но это не очень хорошая идея.

Ruby V .: 1.8.7

1 Ответ

0 голосов
/ 31 мая 2018

Вы используете неправильный метод HTTP.

Если вы хотите создать неидемпотентную операцию, вам следует использовать один из неидемпотентных методов, такой как POST, PATCH, PUT или DELETE not GET.

POST, PATCH, PUT или DELETE запросы отправляются только браузером путем отправки формы *.Вы не можете просто ввести URL в окно браузера, так как он будет отправлен как запрос GET.Браузер также предупреждает пользователя, если он обновляет окно.

Если вы хотите ограничить выполнение операции один раз, вам нужно будет либо сохранить флаг на модели, либо токен, пропущенный через форму, или какой-либо другойспособ сохранения состояния приложения.

Но, возможно, вам стоит посмотреть, как вместо этого регулировать ресурс для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...