【发布时间】:2014-04-16 15:15:07
【问题描述】:
我正在使用 Devise 3.2.4 开发 Rails 4.1 应用程序。
我正在对移动 API 工作流程进行存根处理,我刚刚注意到一些奇怪的事情。
如果我将此POST 提交给用户控制器(这里我正在简化 URL):
POST /api/mobile_sign_in.json
body (json):
{
"email" : "test@example.com",
"password" : "foobar"
}
Rails 创建此参数哈希:
{ "email" => "test@example.com",
"password" => "foobar",
"user" => {
"email" => "test@example.com"
}
}
即在参数中增加一个新成员user: { email: "string" }。
如果我发送一个空的 json 对象会发生类似的事情:
POST /api/mobile_sign_in.json
body (json):
{}
这会导致 Rails 创建这个参数散列:
{ "user" => {} }
如果发送一个真正空正文,则参数哈希正确为空。
我不为此函数使用强参数(目前)。
更新
我可以确认这也发生在其他控制器中。
例如,在LocationsController < ApplicationController 中,rails 会自动对那些可以映射到记录的属性进行分组(和复制)。
{ "authentication_token" => "blablablablabla",
"title" => "test title",
"body" => "one two three",
"latitude" => "0.0",
"longitude" => "0.0",
"timestamp" => "2014-04-16T16:28:20.441+01:00",
"user_id" => "1",
"journey_id" => "1",
"location" => {
"title" => "test title",
"body" => "one two three",
"latitude" => "0.0",
"longitude" => "0.0",
"timestamp" => "2014-04-16T16:28:20.441+01:00"
}
}
在这种情况下,"location" => {} 哈希会自动添加。
我还没有使用强参数,我只是在试验一个测试工具。
此控制器无需设计。
【问题讨论】:
-
您可以发布您的
mobile_sign_in操作的代码吗? -
它没有做任何有趣的事情。它使用
params[:email]找到User,然后使用Devise 方法验证密码。如果正确则返回用户记录,否则返回 false。它不会操纵params对象。 -
向问题添加了更多信息
-
这通常是因为无效的 HTML 代码。
-
@ParitoshPiplewar 可能是……但这不是 HTML 表单提交。我正在使用 curl 和另一个测试工具,它只是提交 HTTP 请求。不涉及 HTML。
标签: ruby-on-rails ruby-on-rails-4