无法在Ruby on Rails中检索POST参数

时间:2016-02-02 18:31:41

标签: ruby-on-rails angularjs post

我在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

当我尝试打印paramsparams[: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

我错过了什么?

1 个答案:

答案 0 :(得分:3)

params[:data]意味着你有一个像这样的JSON结构:

{
  "data": {
      "foo": "1",
      "bar": "2"
  }
}

......在实践中,您的数据比这更浅。

更好的方法是确保您的数据包含在data对象中,并利用强参数,以确保您只接受您期望的内容。

例如,我建议:

private
def api_params
    params.require(:data).permit(:email, :password)
end

然后再次,如果您要尝试滚动自己的登录表单,则可能需要查看Devise。