Как заполнить базу данных, используя файл JSON с хешированным паролем (bcrypt)? - PullRequest
0 голосов
/ 09 мая 2018

В моем исходном файле я сделал так, чтобы исходный файл генерировал данные для модели внутри него, Adminuser. Модель имеет столбец password_digest, в котором хранятся хешированные пароли (с использованием bcrypt). Я получаю данные таблицы из файла JSON, который я анализирую по начальному файлу, чтобы он попал в мою базу данных mySQL. Проблема заключается в том, что пароли не заполняются правильно, и я получаю эту ошибку:

"ActiveRecord :: RecordInvalid: проверка не удалась: пароль не может быть пустым, пароль слишком короткий (минимум 6 символов)"

seeds.rb

adminuser = JSON.parse(File.read(Rails.root.join("export-admin_user.json")))
adminuser.each do |admin|
  Adminuser.create!(admin)
end

экспорт admin_user.json

[
    {
    "id":6,
    "username":"admin",
    "password_digest":"$2a$10$Z0tK32wRaoO4SmWl4D8vKObpaUgobb.WwS2T3mr64eZdK48/oybRm",
    "email":"sample_email1@gmail.com",
    "first_name":"admin",
    "last_name":"admin",
    "email_confirmed":true,
    "confirm_token":null,
    "created_at":"2018-03-13T02:14:34.000Z",
    "updated_at":"2018-03-13T02:14:34.000Z",
    "admin_type":"admin"
    },

    {"id":7,
    "username":"registrar",
    "password_digest":"$2a$10$hX4IlT.mn1W8fwLQ7t4JYOEz0xwuK7W1Kp655Q3doQfd08c8/ZoKm",
    "email":"sample_email2@gmail.com",
    "first_name":"registrar",
    "last_name":"registrar",
    "email_confirmed":true,
    "confirm_token":"9WhkWPT5Hhuhkimwb-F_hQ",
    "created_at":"2018-04-03T02:31:49.000Z",
    "updated_at":"2018-04-03T02:31:49.000Z",
    "admin_type":"registrar"
    }
]

Я не понимаю, почему возникает эта ошибка. Импорт данных таблицы с использованием файла .sql работает, так почему же этот способ заполнения данных не работает?

1 Ответ

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

Судя по комментарию Саджина, все, что мне нужно было сделать, это пропустить проверку при создании записи.

Семя сработало, когда я заменил:

Adminuser.create!(admin)

с:

Adminuser.new(admin).save!(validate: false)
...