Почему мое приложение Rails возвращает «Пароль слишком короткий (минимум 6 символов)», когда у меня правильное количество символов? - PullRequest
1 голос
/ 21 июня 2020

Я создаю простую страницу регистрации.

Вот моя модель пользователя с ее проверками и ассоциациями:

class User < ApplicationRecord
    has_secure_password

    has_many :posts
    has_many :comments
    has_many :likes

    validates :username, presence: true, uniqueness: true
    validates :password, presence: true, length: { minimum: 6 }
end

Вот моя миграция пользователей:

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :username
      t.string :password_digest
      t.integer :age
      t.integer :years_in_the_labor
      t.string :title
      t.string :location
      t.string :ministry

      t.timestamps
    end
  end
end

Вот также мой метод создания пользовательского контроллера:

def create
    @user = User.new(name: params[:name], title: params[:title], username: params[:username], password: [:password])

    if @user.valid?
        @user.save
        render json: { status: 200, user: @user }
    else
        render json: { status: 401, message: @user.errors.full_messages }
    end
end

Я отправляю параметры через fetch, вот какие параметры:

<ActionController::Parameters {"name"=>"Test Name User", "title"=>"Test Title User", "username"=>"test_username_user", "password"=>"password123", "controller"=>"users", "action"=>"create", "user"=>{"name"=>"Test Name User", "username"=>"test_username_user", "title"=>"Test Title User"}} permitted: false>

И я получаю это ошибка:

message: ["Password is too short (minimum is 6 characters)"]

Проверка моего пароля не работает, хотя я передаю правильное количество символов.

Ответы [ 2 ]

5 голосов
/ 21 июня 2020

Вы передаете User.new только [: password] вместо params [: password]

чаще всего используется для передачи параметров только частной функции, например:

private

def user_params
   params.require(:user).permit(:name, :title, :username, :password)
end

И затем в вашем методе создания:

@user = User.new(user_params)

Обновить

И вместо того, чтобы спрашивать, действителен ли пользователь, вы можете напрямую проверить, был ли пользователь сохранен

if @user.save
  # your code for success
else
  # your code for failure
end
0 голосов
/ 19 июля 2020

Ваш пароль пропущен params[:password]

@user = User.new(name: params[:name], title: params[:title], username: params[:username], password: params[:password])

Поскольку он не соответствует ни одному паролю, он пуст, что составляет менее 6 символов.

...