2016-02-02 3 views
0

У меня есть простой вызов в AngularJS:Не удается получить параметры POST в Ruby On Rails

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

Можете ли вы опубликовать вывод «рейк-маршрутов» для этого маршрута в вопросе? – Pavan

+0

@Pavan: Это уже есть. – Makoto

+0

@ Макото Nope. В вопросе – Pavan

ответ

3

params[:data] означает, что у вас есть JSON структуру, как это:

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

... когда на практике ваши данные немного мельче, чем это.

Лучшим подходом было бы обеспечить, чтобы ваши данные были обернуты в объект data, и чтобы использовать сильные параметры, чтобы вы обеспечивали, чтобы вы принимали только то, что ожидаете.

Например, я хотел бы предложить следующее:

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

Тогда снова, если вы пытаетесь свернуть свой собственный знак в форме, вы можете захотеть взглянуть на Devise вместо этого.

+0

Вы тоже правы, если я отправлю json, как тот, который вы написали, я могу извлечь все данные! – ste

Смежные вопросы