【问题标题】:Rails adding an unpermitted param to requests on its ownRails 自行向请求添加未经许可的参数
【发布时间】:2021-04-11 10:45:27
【问题描述】:

我有一个与 Rails 6 API 通信的 Vue 应用程序。我注意到在我的一些端点中有一些奇怪的行为,Rails 接收到一些看似从未真正从前端发送的参数,就好像 Rails 只是自己注入它们一样。这不是一个大问题,因为这些参数最终都会被拒绝,并且允许的参数工作正常,但我很好奇到底发生了什么。

例如,我在前端的登录方法将使用包含usernamepassword 的JSON 调用/authenticate 端点。正如您在下面的屏幕截图中所见,这是发送到 Rails 的整个请求负载。

但在 Rails 日志中,每次发出此请求时,我都会看到一个额外的未经许可的参数以 user => { username: "dummy" } 的形式出现。

我的authenticate控制器方法很简单

def authenticate
  @user = User.find_by(username: user_params[:username])

  if @user&.authenticate(params[:password])
    token = JsonWebToken.encode(user_id: @user.id)
    render json: { token: token, user: @user }, status: :ok
  else
    render json: { error: 'Invalid username or password, please try again' }, status: :unauthorized
  end
end

def user_params
  params.permit(:username, :password, :email)
end

这里到底发生了什么?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    这些被称为包装参数并由控制器级别的导轨插入

    https://api.rubyonrails.org/v6.0.0/classes/ActionController/ParamsWrapper.html

    将参数散列包装成嵌套散列。这将允许客户端提交请求而无需指定任何根元素。

    您可以通过将此 wrap_parameters false 放在控制器中来关闭它,甚至可以在控制器级别或初始化程序 config/initializers/wrap_parameters.rb 内的应用级别自定义它

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      相关资源
      最近更新 更多