ruby-on-rails - 如何禁用 Active Storage 自动生成的路由
问题描述
我正在将现有应用程序升级到 Rails 5.2。
旧应用程序正在使用 Paperclip 进行文件存储,我正在尝试将其移至 ActiveStorage。
我的应用程序公开了一个 API,允许用户安全地上传文件(使用密钥/秘密对签署请求)。
当我安装 ActiveStorage 时,我发现了几条新路线
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
我如何禁用这些路由以不允许随机上传到我的应用程序。
解决方案
要安全删除所有 ActiveStorage 路由而不会产生副作用,请将其添加到 config/application.rb:
class Application < Rails::Application
...
initializer(:remove_activestorage_routes, after: :add_routing_paths) {|app|
app.routes_reloader.paths.delete_if {|path| path =~ /activestorage/}}
...
end
我建议不要require 'rails/all'
在 config/application.rb 中用从 rails 源代码中获取的 rails gem 列表替换,这通常是推荐的。
推荐阅读
- python - Django,查询过滤器不适用于预取数据
- javascript - javascript dom 样式属性的函数
- reactjs - 在光滑的滑块内居中项目
- sql - 使用 SQL Oracle 中的 where 语句从列中复制奇怪的值
- c# - 试图将我的船旋转到平行于网格的问题,正常它漂浮在上面
- python - 将行添加到数据框的部分
- semaphore - FreeRTOS:xSemaphoreTakeFromISR 如何唤醒任何任务
- javascript - js过滤多页列表
- javascript - 如何为具有多个参数的画布函数创建循环?
- snowflake-cloud-data-platform - 在共享中创建的新对象是否立即可供消费者使用或不在雪花中