Jos*_*osh 5 api json ruby-on-rails
我有一个仅作为 API 构建的 Rails 5.2 应用程序。我正在使用 Postman 来测试端点。目前,我正在用根元素包装我所有的 JSON POSTS,以便让它传递“强参数”。然而,根据 Rails 文档,wrap_parameters设置为接受 JSON,我不应该这样做,但是,如果我不这样做,我的 POST 就会失败。我究竟做错了什么?
# users_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:show, :update, :destroy]
.....
# POST /users
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
.....
private
.....
# Only allow a trusted parameter "white list" through.
def user_params
params.require(:user).permit(:email, :password, :is_admin, :is_agent)
end
end
Run Code Online (Sandbox Code Playgroud)
# config/initializers/wrap_parameters.rb
ActiveSupport.on_load(:action_controller) do
wrap_parameters format: [:json]
end
Run Code Online (Sandbox Code Playgroud)
如果我将 JSON 包装在 a 中,user它就可以正常工作,但是,根据 Rails 文档,我不必这样做。
http://api.rubyonrails.org/v5.2.0/classes/ActionController/ParamsWrapper.html
我曾尝试将wrap_parameters Userand 和wrap_parameters :userandwrap_parameters format: [:json]直接添加到 ,users_controller.rb但这没有任何作用。
我究竟做错了什么?
这是因为参数白名单。
def user_params
params.require(:user).permit(:email, :password, :is_admin, :is_agent)
end
Run Code Online (Sandbox Code Playgroud)
这里,需要用户密钥。从安全角度来看,RoR 中将参数列入白名单是一个很好的功能
如果您只写 params.permit(:email, :password, :is_admin, :is_agent),那么您相同的请求将起作用,但不建议删除用户对象。
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |