Как избежать ошибки 401 (Unauthorized) при создании новой конечной точки API для Solidus/Spree?

Я делаю PUT "/api/shipments/H10372375236/ready_for_pickup", но это останавливается на Spree::BaseController#authenticate_user. Мой запрос PUT не содержит заголовка X-Spree-Token, как того требует BaseController#api_key

Это код моей кнопки:

 <%= form_tag(spree.api_ready_for_pickup_path(shipment), { method: "PUT", remote: true, id: "admin-ship-shipment" }) do %>
   <%= submit_tag Spree.t(:ready_for_pickup), class: "ship-shipment-button" %>
 <% end %>

Это мои маршруты:

Spree::Core::Engine.routes.draw do
  namespace :api, defaults: { format: 'json' } do
    put '/shipments/:id/ready_for_pickup' => 'shipments#ready_for_pickup', as: :ready_for_pickup
  end
end

Rails.application.routes.draw do    
  mount Spree::Core::Engine, :at => '/' 
end

rake routes доступен в виде Gist здесь. Я создал ключ API для текущего пользователя в интерфейсе администратора. Как убедиться, что запрос PUT содержит отсутствующий X-Spree-Token?


person martins    schedule 06.04.2016    source источник


Ответы (2)


Я бы поддержал этот ответ SO, который должен установить заголовок в действии обновления вашего контроллера следующим образом:

response.headers["X-Spree-Token"] = auth_token
person born4new    schedule 06.04.2016
comment
auth_token отсутствует в Spree::Api::ShipmentsController - person martins; 06.04.2016
comment
Здесь auth_token нужно заменить на ваш X-Spree-Token ;) - person born4new; 06.04.2016
comment
Да, но, как я писал в начальном посте, у меня нет X-Spree-Token. :-( - person martins; 06.04.2016
comment
Ваш x-spree-токен — это ваш API-ключ! (ознакомьтесь с guides.spreecommerce.com/api/summary.html в разделе Создание API Вызов) - person born4new; 06.04.2016

Я исправил это, отправив spree_api_key в качестве параметра токена в форме.

    <%= form_tag(spree.api_ready_for_pickup_path(shipment), { method: "PUT", remote: true, id: "admin-ship-shipment" }) do %>
      <%= hidden_field_tag :token, try_spree_current_user.spree_api_key %>
      <%= submit_tag Spree.t(:ready_for_pickup), class: "ship-shipment-button" %>
    <% end %> 
person martins    schedule 06.04.2016