ActiveStorage и прямые загрузки не будут работать в разработке - PullRequest
0 голосов
/ 07 ноября 2018

Я экспериментирую с ActiveStorage, потому что хочу создать приложение Rails, где пользователь может загружать данные прямо в пространства DigitalOcean.

Однако я уже столкнулся с проблемой CSRF.

Я объявил цифровой океан в моем хранилище.yml:

do:
  service: S3
  access_key_id: this_is_a_secret
  secret_access_key: this_is_also_a_secret
  region: ams3
  bucket: this_is_also_a_secret
  endpoint: 'https://this_is_also_a_secret.ams3.digitaloceanspaces.com'

Я выбрал эту услугу хранения в моем development.rb

config.active_storage.service = :do

и я добавил драгоценный камень aws в Gemfile

gem "aws-sdk-s3", require: false

Мне потребовалось activestorage в моем комплекте javascript.

и я добавил для проверки следующее:

= form_for(VideoUpload.first, url: "/") do |form|
  div = form.file_field :file, direct_upload: true
  div = form.submit("Send that file")

Когда я отправляю форму, включается библиотека activestorage.js. Она вызывает http://127.0.0.1:3000/rails/active_storage/direct_uploads, что в свою очередь выдает 422 из-за отсутствующего токена CSRF. Я проверил запрос, и контроллер не ошибается. В заголовках HTTP не установлен токен CSRF, X-CSRF-Token странным образом равен undefined.

Тело запроса содержит: {"blob":{"filename":"9T6qqsA-png-wallpapers.jpg","content_type":"image/jpeg","byte_size":122990,"checksum":"gqU9VBgS9mmH7s45qHIbug=="}}, поэтому здесь токена CSRF тоже нет.

Но форма, в которой указан элемент входного файла, содержит токен, поэтому я предполагаю, что activestorage.js подхватит его.

Что мне здесь не хватает? Документация на https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-uploads не подразумевает, что какая-либо специальная конфигурация на стороне JS необходима.

Я использую Rails 5.2.1 и Ruby 2.5.1

...