Rails 5.1 路由:动态 :action 参数 [英] Rails 5.1 Routes: dynamic :action parameters

查看:23
本文介绍了Rails 5.1 路由:动态 :action 参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Rails 5.0.0.beta4 对包含动态 :action 和 :controller 段的路由引入了弃用警告:

Rails 5.0.0.beta4 introduced a deprecation warning on routes containing dynamic :action and :controller segments:

DEPRECATION WARNING: Using a dynamic :action segment in a route is deprecated and will be removed in Rails 5.1. 

来自此 PR 的提交消息 指出:

允许通过路径指定 :controller 和 :action 值在 config/routes.rb 中一直是许多问题的根本原因在导致安全发布的 Rails 中.有鉴于此最好将控制器和动作明确列入白名单而不是试图将坏"值列入黑名单或清理.

Allowing :controller and :action values to be specified via the path in config/routes.rb has been an underlying cause of a number of issues in Rails that have resulted in security releases. In light of this it's better that controllers and actions are explicitly whitelisted rather than trying to blacklist or sanitize 'bad' values.

您将如何将一组操作参数列入白名单"?我的路由文件中有以下内容,这些内容引发了弃用警告:

How would you go about "whitelisting" a set of action parameters? I have the following in my routes file, which are raising the deprecation warning:

namespace :integrations do
  get 'stripe(/:action)', controller: 'stripe', as: "stripe"
  post 'stripe/deactivate', controller: 'stripe', action: 'deactivate'
end

推荐答案

虽然有点麻烦,但最好的方法似乎是明确定义路由:

Though it's a bit cumbersome, the best approach seems to be to explicitly define the routes:

namespace :integrations do
  namespace 'stripe' do
    %w(auth webhook activate).each do |action|
      get action, action: action
    end
  end
  post 'stripe/deactivate', controller: 'stripe', action: 'deactivate'
end

这篇关于Rails 5.1 路由:动态 :action 参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆