Nie*_* B. 5 ruby-on-rails rails-activestorage
我正在试验 ActiveStorage,因为我想创建一个 Rails 应用程序,用户可以在其中直接上传到 DigitalOcean 空间。
但是,我已经遇到了 CSRF 问题。
我在我的 storage.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'
Run Code Online (Sandbox Code Playgroud)
我选择了我的存储服务 development.rb
config.active_storage.service = :do
Run Code Online (Sandbox Code Playgroud)
我已经将 aws gem 添加到 Gemfile
gem "aws-sdk-s3", require: false
Run Code Online (Sandbox Code Playgroud)
我activestorage在我的 javascript 包中需要。
我已将以下内容添加到我的视图中以进行测试:
= form_for(VideoUpload.first, url: "/") do |form|
div = form.file_field :file, direct_upload: true
div = form.submit("Send that file")
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,activestorage.js 库会启动。它调用它又http://127.0.0.1:3000/rails/active_storage/direct_uploads由于缺少 CSRF 令牌而抛出 422。我已经检查了请求,控制器没有错。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
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |