отправка почтового запроса на разработку регистраций с использованием json - PullRequest
0 голосов
/ 22 мая 2018

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

Я отправляю этот запрос JSON на URL-адрес: http://0.0.0.0:3000/users/

{
    "username": "username",
    "email": "name@example.com",
    "password": "password",
    "password_confirmation": "password"
}

При отправке этого запроса я получаю следующий ответ:

{
    "status": "ERROR",
    "message": "Could not create new user account",
    "data": {
        "email": [
            "can't be blank"
        ],
        "password": [
            "can't be blank"
        ]
    }
}

Я создал еще один контроллер регистрации, который наследуется от Devise :: RegistrationController.Вот оно:

  1 module Api
  2   module V1
  3     class RegistrationsController < Devise::RegistrationsController
  4 
  5       before_action :configure_permitted_parameters
  6       respond_to :json

  7       def new
  8         user = User.new(user_params)
  9       end
 10 
 11       def create
 12            user = User.create(username: params[:username], 
 13                         email: params[:email], 
 14                         password: params[:password],
 15                         password_confirmation: params[:password_confirmation])
 16      
 17         if user.save 
 18           render json: {status: "SUCCESS", message: "Created new user account", data: user }, status: :ok
 19         else 
 20           render json: {status: "ERROR", 
 21                         message: "Could not create new user account", 
 22                         data: user.errors}, 
 23                         status: :unprocessable_entity
 24  
 25         end
 26       end
 27       
 28       private 
 29       
 30       def user_params
 31         params.require(:user).permit(:username, :email, :password, :password_confirmation)
 32       end
 33 
 34       protected
 35 
 36       def configure_permitted_parameters
 37         devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
 38       end
 39 
 40     end
 41   end
 42 end

Есть идеи, почему я получаю этот ответ и как его исправить?Я извлекаю письмо и пароль из хэша params и передаю их в функцию создания.Я не знаю, почему в ответе говорится, что он пуст

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Я думаю, что проблема, с которой вы столкнулись на данный момент, заключается в том, что вы неправильно обращаетесь к параметрам.если я не ошибаюсь, ваши пользовательские параметры будут входить в params [: user]

, поэтому вам нужно изменить эти строки на:

user = User.create(username: params[:username], 
                   email: params[:user][:email], 
                   password: params[:user][:password],
                   password_confirmation: params[:user][:password_confirmation])

, но чтобы быть уверенным, посмотрите на серверКонсоль и увидеть параметры, которые входят в запрос, вы увидите что-то вроде

Started POST "/users" for 127.0.0.1 at 2018-05-22 14:56:56 -0400
Processing by Users::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"pQhz8qXPbK/lXhioL5H4iq6nxImOmtG9ya81Cuke6Ez+uqDKwNlhTMjv8spjcNhMmXFQMUAB+enlOHeZakwgow==", "user"=>{"email"=>"asdasdasasd@asdassdasd.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "terms_of_service"=>"1"}, "commit"=>"Sign up"}
#<ActionController::Parameters:0x007fa5f6b457c8>

и там вы можете увидеть реальную структуру, которая приходит на сервер по запросу, говоря о параметрах

0 голосов
/ 13 февраля 2019

Вы должны отформатировать параметры, вложенные в «user», например:

{  
"user": {
    "username": "username",
    "email": "name@example.com",
    "password": "password",
    "password_confirmation": "password"
  }
}

, как видно на в этом ответе

0 голосов
/ 22 мая 2018

Убедитесь, что вы изменили раскрывающийся список почтальона с text на JSON (application/json)

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