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