Ruby on rails Rails自己向请求添加未经许可的参数

Ruby on rails Rails自己向请求添加未经许可的参数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个与Rails 6 API通信的Vue应用程序。我注意到我的一些端点出现了一些奇怪的行为,其中Rails接收到一些似乎从未从前端发送的参数,就好像Rails只是在自己注入它们一样。这不是一个大问题,因为这些参数最终都会被拒绝,并且允许的参数工作得很好,但我很好奇到底发生了什么 例如,我在前端的登录方法将使用包含用户名和密码的JSON调用/authenticate端点。正如您在下面的屏幕截图中所看到的,这是发送到Rails的整个请求负载 但是在Rails日志中,每次发出这个请求时,我都会看

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

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

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

我的
authenticate
控制器方法非常简单

def身份验证
@user=user.find_by(用户名:user_参数[:username])
如果@user&.authenticate(参数[:密码])
token=JsonWebToken.encode(user_id:@user.id)
呈现json:{token:token,user:@user},状态::ok
其他的
呈现json:{错误:'无效的用户名或密码,请重试'},状态::未经授权
结束
结束
def用户参数
参数许可证(:用户名,:密码,:电子邮件)
结束

这里到底发生了什么?

这些被称为包装参数,由rails在控制器级别插入

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

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