Rails: в API отсутствуют сильные параметры - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь создать приложение с Rails в качестве провайдера API и немного застрял во время настройки процесса аутентификации пользователя. Всякий раз, когда я пытаюсь создать нового пользователя почтальоном, я получаю сообщение о том, что мой контроллер не может распознать параметры пользователя и выдает ошибку:

Начинается POST "/ api / v1 / create" для :: 1 в 2020-02-23 02:36:29 +0100 Обработка Api :: V1 :: UsersController # создать как / Параметры: {"password" => "[FILTERED]", "password_confirmation" => "[FILTERED]", "username" => "Andrzej Strzelba", "email" => "andrzej@strzelba.com"} {"password" => "qwertyUI1", "password_confirmation" => "qwertyUI1", "username" = > "Andrzej Strzelba", "email" => "andrzej@strzelba.com", "controller" => "api / v1 / users", "action" => "create"} Выполнено 400 неверных запросов за 1 мс (ActiveRecord: 0,0 мс )

ActionController :: ParameterMissing (параметр отсутствует или значение пусто: пользователь): app / controllers / api / v1 / users_controller.rb: 28: in user_params' app/controllers/api/v1/users_controller.rb:8:in create '

и мой контроллер:

    class UsersController < ApplicationController
    skip_before_action :verify_authenticity_token

    def create
        puts params
        @user = User.new(user_params)
        if @user.save
            render json: { status: :created, user: @user}
        else
            render json: {status: 500, errors: @user.errors.full_messages }
        end
    end

    private
    def user_params
        params.require(:user).permit(:username, :email, :password, :password_confirmation)
    end 

    end

Я почти уверен, что проблема вызвана отсутствием переноса моих параметров с помощью клавиши "user". Я имею в виду user: {email: '...', username: '...' ect}, но я не совсем уверен, как решить эту проблему в Postman. Я также пытался отправить ниже JSON. Но и это не удалось:

{
    "user":
    {
        "username": "Andrzej Strzelba",
        "email": "andrzej@strzelba.com",
        "passowrd": "qwertyUI1!",
        "password_confirmation": "qwertyUI1!"
    }
} 

Как это исправить?

Ответы [ 3 ]

2 голосов
/ 24 февраля 2020

Ваш код выглядит хорошо. Во-первых, предположим, что вы неправильно использовали почтальон. Вы пробовали это?

Ниже URL вы можете найти: Тело >> сырье >> JSON (посмотрите на картинку)

тело почтальона отправить json

Иначе, вы можете попытаться удалить require(:user), поэтому он становится:

def user_params
  params.permit(:username, :email, :password, :password_confirmation)
end

И отправить JSON:

{
    "username": "Andrzej Strzelba",
    "email": "andrzej@strzelba.com",
    "passowrd": "qwertyUI1!",
    "password_confirmation": "qwertyUI1!"
}
1 голос
/ 23 февраля 2020

Попробуйте опубликовать параметры своего пользователя, как это, и добавьте маркер доступа в авторизации.

{
    "username": "Andrzej Strzelba",
    "email": "andrzej@strzelba.com",
    "passowrd": "qwertyUI1!",
    "password_confirmation": "qwertyUI1!"
}
1 голос
/ 23 февраля 2020

Вы не должны передавать свои параметры как пользовательский объект, отправляйте его без ключевого слова пользователя. Вот так

{
        "username": "Andrzej Strzelba",
        "email": "andrzej@strzelba.com",
        "passowrd": "qwertyUI1!",
        "password_confirmation": "qwertyUI1!"
}

Тогда должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...