我目前正在使用Postman向以下路线发出POST请求:' localhost:3000 / members / login'。帖子请求的内容如下:
{
"email": "user@email.com",
"password": "password"
}
路线定义如下:
def login
puts params.inspect
puts member_params.to_s
member = Member.find_by(email: params[:email].to_s.downcase)
end
...
def member_params
params.require(:member).permit(:email, :password, :password_confirmation)
end
我在控制台收到的输出如下:
Started POST "/members/login" for 127.0.0.1 at 2018-01-02 18:56:28 -0800
(2.5ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Processing by MembersController#login as */*
<ActionController::Parameters {"controller"=>"members", "action"=>"login"} permitted: false>
Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)
ActionController::ParameterMissing (param is missing or the value is empty: member):
app/controllers/members_controller.rb:94:in `member_params'
app/controllers/members_controller.rb:65:in `login'
你可能已经猜到了,我对此很陌生。我特别想要的是以下内容:
1)是否有快速解决方法,为什么参数(电子邮件和密码)没有从Postman POST请求传递到API,以帮助我实现这一点
2)为了使答案对未来可能谷歌这个问题的人更有帮助,当API调用(特别是POST请求)没有按预期传递参数时,是否有一个快速的建议步骤清单?
答案 0 :(得分:0)
您的member_params
函数要求传递member
,这不包含在您从Postman发送的参数中。
您没有看到任何正在打印的内容,因为member_params
函数是before_action
,这意味着它会在您的登录函数被调用之前发生。
更改Postman中的内容以包含它。
{
"member":
{
"email": "email address",
"password": "password"
}
}
答案 1 :(得分:-2)
我认为你的json应该是这样的
{member:{emai:___, password:_____}}