我在AngularJS中有一个简单的调用:
var data = {
'email': username,
'password': password
}
return $http
.post('https://heroku-thing.com/api/v1/login', data)
.then(function(res){
console.log('here');
});
在我的Rails控制器中,我有:
class ApiController < ApplicationController
skip_before_filter :verify_authenticity_token
def login
p params[:data]
p params
render :json => {:test => 'test'}
end
end
这是路线档案:
scope '/api' do
scope '/v1' do
scope '/login' do
post '/' => 'api#login'
end
end
end
当我尝试打印params
或params[:data]
时,我什么都没得到。我可以在Ruby控制台中清楚地看到参数:
2016-02-02T18:22:28.990206+00:00 app[web.1]: Parameters: {"email"=>"aws", "password"=>"[FILTERED]", "api"=>{"email"=>"aws", "password"=>"[FILTERED]"}}
2016-02-02T18:22:28.990489+00:00 app[web.1]: nil
我错过了什么?
答案 0 :(得分:3)
params[:data]
意味着你有一个像这样的JSON结构:
{
"data": {
"foo": "1",
"bar": "2"
}
}
......在实践中,您的数据比这更浅。
更好的方法是确保您的数据包含在data
对象中,并利用强参数,以确保您只接受您期望的内容。
例如,我建议:
private
def api_params
params.require(:data).permit(:email, :password)
end
然后再次,如果您要尝试滚动自己的登录表单,则可能需要查看Devise。