我正在尝试ActiveStorage,因为我想创建一个Rails应用程序,用户可以在其中直接上载到DigitalOcean空间。
但是,我已经遇到CSRF问题了。
我已经在我的storage.yml中声明了数字海洋:
unsigned long
我在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
并且我将aws gem添加到了Gemfile
config.active_storage.service = :do
我在我的JavaScript包中需要gem "aws-sdk-s3", require: false
。
,并且我在视图中添加了以下内容进行测试:
activestorage
提交表单时,activestorage.js库将启动。它调用= form_for(VideoUpload.first, url: "/") do |form|
div = form.file_field :file, direct_upload: true
div = form.submit("Send that file")
,由于缺少CSRF令牌,该库又抛出422。我检查了请求,控制器没有错。 HTTP标头中未设置CSRF令牌,http://127.0.0.1:3000/rails/active_storage/direct_uploads
奇怪地设置为X-CSRF-Token
。
请求正文包含:undefined
,因此此处也没有CSRF令牌。
但是指定输入文件元素的形式包含一个标记,因此我假设{"blob":{"filename":"9T6qqsA-png-wallpapers.jpg","content_type":"image/jpeg","byte_size":122990,"checksum":"gqU9VBgS9mmH7s45qHIbug=="}}
会选择它。
我在这里想念什么? activestorage.js
上的文档并不意味着JS端需要任何特殊的配置。
我正在使用Rails 5.2.1和Ruby 2.5.1