Rails POST Запрос Неверный Токен Авторитет

Я построил маршрут запроса POST как:

match '/getActivatedFriends',
  to: 'requests#getActivatedFriends', via: 'post',
  constraints: { friends_phone_number_csv: /([0-9]+,?)+/ } 

с действием:

def getActivatedFriends
    @results = BusinessUser.find_by_sql("SELECT 
                                            a.id
                                         ,  a.username
                                         ,  a.phoneNumber
                                         FROM users a
                                         WHERE phoneNumber in ('+params[:friends_phone_number_csv]+') and
                                               removed = 0 and
                                               is_user = 1;")

    respond_to do |format|
        format.html
        format.json { render json: { friends_match: @results }}
    end         
end

Это должно вернуть объект JSON для соответствующих пользователей. Я тестировал POSTMAN как:

введите здесь описание изображения

Но возвращается ошибка, указывающая на недопустимый токен аутентификации.

Как я могу перенастроить, чтобы этот маршрут POST работал?


person Sauron    schedule 29.03.2015    source источник
comment
можем ли мы увидеть ваши маршруты   -  person Cyzanfar    schedule 29.03.2015
comment
Запуск rake route показывает, что он должен существовать: getActivatedFriends POST /getActivatedFriends(.:format) requests#getActivatedFriends   -  person Sauron    schedule 29.03.2015


Ответы (1)


По умолчанию Rails использует CSRF protection в контроллере. Он добавляется в вашу форму hidden_field с маркером подлинности. Но в вашем если вы не используете форму, вы можете отключить CSRF protection на контроллере, пропустив проверку before_action. Добавьте в верхнюю часть вашего контроллера запросов:

skip_before_filter :verify_authenticity_token

или в Rails 4 and 5(это та же самая команда):

skip_before_action :verify_authenticity_token
person Зелёный    schedule 29.03.2015
comment
Почему эта ошибка появляется для запроса POST, а не для других? - person Sauron; 29.03.2015
comment
Потому что это POST запрос на обновление некоторых ваших ресурсов. Это сделано из соображений безопасности. ИМО - person Зелёный; 29.03.2015
comment
Хорошо, мне просто нужно будет обезопасить позже. Спасибо, это сработало - person Sauron; 29.03.2015
comment
В рельсах 5 используйте skip_before_action - person Mohammad Mahroz; 25.05.2018