Подтвердить что ты не робот

Посещение пользователей с помощью Devise в Ruby on Rails

В моей среде разработки и тестирования, я хочу, чтобы семена базы данных с кучей пользователей. Я использую Ruby on Rails v3.2.8 и последнюю версию. Поэтому я добавил эту строку в файл db/seeds.rb:

User.create(email: '[email protected]', encrypted_password: '#$taawktljasktlw4aaglj')

Однако, когда я запускаю rake db:setup, я получаю следующую ошибку:

рейк прерван! Невозможно назначить защищенные атрибуты: encrypted_password

Каким образом можно использовать семена для пользователей?

4b9b3361

Ответ 1

Вам нужно сделать следующее:

user = User.new
user.email = '[email protected]'
user.encrypted_password = '#$taawktljasktlw4aaglj'
user.save!

Прочитайте это руководство, чтобы понять, что такое массовое присвоение: http://guides.rubyonrails.org/security.html

Мне интересно, почему нужно напрямую устанавливать зашифрованный пароль. Вы можете сделать это:

user.password = 'valid_password'
user.password_confirmation = 'valid_password'

Ответ 2

Арун прав. Легче просто сделать это в своем seeds.rb

user = User.create! :name => 'John Doe', :email => '[email protected]', :password => 'topsecret', :password_confirmation => 'topsecret'

Ответ 3

Пропустить метод comfirmation будет работать, только если у вас есть соответствующий модуль в вашей модели пользователя, иначе удалите его.

  user = User.new(
      :email                 => "[email protected]",
      :password              => "123456",
      :password_confirmation => "123456"
  )
  user.skip_confirmation!
  user.save!

Ответ 4

Это старый вопрос, но вот пример с пользователем admin (от cancancan):

User.create!([
  {email: "[email protected]", password: "testadminuser", password_confirmation: "testadminuser", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:02:10", last_sign_in_at: "2015-02-06 14:02:10", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: true},
  {email: "[email protected]", password: "testuseraccount", password_confirmation: "testuseraccount", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:03:01", last_sign_in_at: "2015-02-06 14:03:01", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false},
  {email: "[email protected]", password: "testcustomeruser", password_confirmation: "testcustomeruser", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:03:44", last_sign_in_at: "2015-02-06 14:03:44", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])

Ответ 5

Если вы используете модуль confirmable, вам нужно сделать что-то вроде:

user = User.new(
  email: '[email protected]', 
  password: '123456789', 
  password_confirmation: '123456789'
)
user.skip_confirmation!
user.save!

В вызове skip_confirmation! просто скажите, что вам не нужно подтверждать эту учетную запись.
Другая опция просто устанавливает атрибут confirmed_at пользователя как Time.now.utc перед сохранением.

Ответ 6

Чтобы засеять таблицу пользователей:

User.create(
        email: "[email protected]",
        password: "12345678"
    )

Установив devise, :password будет автоматически хэширован и сохранен в :encrypted_password

Ответ 7

Я не знаю, может ли это помочь, но на самом деле я делаю это, чтобы создать пользователя Admin по умолчанию в моем Rails 5, но без совместного использования пароля в простой текст в моем репозитории GitHub.

В принципе логика для этого:

  • Создайте безопасный случайный пароль для пользователя по умолчанию при посеве.
  • Перейдите в ".../admins/sign_in" и нажмите на ссылку "Забыли пароль?" на RESET.
  • Получите ссылку reset пароля в этой учетной записи электронной почты по умолчанию.
  • Установите новый пароль.

Итак, в db/seeds.rb добавьте это:

randomPassword = Devise.friendly_token.first(8)
mainAdminUser = Admin.create!(email: "[email protected]", password: randomPassword, name: "Username")

И если вы используете утилиту confirmable, просто пропустите подтверждающий вариант, выполнив следующее:

mainAdminUser = Admin.new(
    email: "[email protected]",
    password: randomPassword,
    password_confirmation: randomPassword,
    name: "Username"
)
mainAdminUser.skip_confirmation!
mainAdminUser.save!

И твоя доброта!

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

Ответ 8

Для разработчиков в файле seed.rb у меня сработало использование общего пароля при сохранении нового пользователя. Затем обновите зашифрованный пароль и снова сохраните модель. Это был хакерский способ.

user = User.new(
    :email                 => "[email protected]",
    :password              => "fat12345",
    :password_confirmation => "fat12345"
)
user.save!
user.encrypted_password="ENCRYPT.MY.ASS!!!KJASOPJ090923ULXCIULSH.IXJ!S920"
user.save

ОБНОВЛЕНИЕ, опубликованное другими, и это лучший способ сделать это:

user = User.new(
    email: "[email protected]", 
    password: "foob1234", 
    password_confirmation: "foob1234"
)
user.skip_confirmation! #only if using confirmable in devise settings in user model.
user.save!

Ответ 9

Я сделал то же самое в одном из моих требований, чтобы просто вставить мой фрагмент

def triggerSeedUsers
      p "Starting Seeding Users..."
      p   "Deleting all users"..
      User.destroy_all
      normal_users = [{:email => '[email protected]', :login => "abc_demo", :name => 'abc Demo'}]
      admin_users = [{:email => '[email protected]', :login => 'abc_admin', :name => 'abc Admin'}]

      [normal_users,admin_users].each do |user_type|
        user_type.each do |user|
          User.create!(:name => user[:name],
            :login => user[:login],
            :email => user[:email],
            :first_login => false,
            :password => '[email protected]',
            :password_confirmation => '[email protected]'
            )
        end
      end
      User.where('name LIKE ?', '%demo%').update_all(:is_admin => 0)
      User.where('name LIKE ?', '%admin%').update_all(:is_admin => 1)
     end

Ответ 10

Используйте свой файл db/seeds.rb для запуска вашего первого пользователя:

User.create!(email: '[email protected]', 
             password: '123456789', 
             password_confirmation: '123456789')

Ответ 11

с подтверждением электронной почты в db: seed:

User.create!( name: 'John', email:'[email protected]', password: '123456', password_confirmation: '123456',confirmed_at: '2018-08-04 04:51:43', current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1")

Ответ 12

Просто добавьте: атрибут password rest, devise сделает для вас password_encrypt

user = User.new({ email: '[email protected]', password: 'EnterYourPassword'})
user.save!
flash[:notice] = 'User Created'

#or for extra logic

        #if user.save
          #ExtraCredentialsOrLogic

        #elsif user.errors.any?
          #user.errors.full_messages.each do |msg|
            #puts msg
          #end
        #else
          #puts "****NOT VALID****"
    #end

и теперь запустите 'rake db: seed'

Ответ 13

Это позволяет вам запускать начальное число раз без ошибок:

User.where(email: "[email protected]").first_or_create.update_attributes(nome: "Your Name",
    email: "[email protected]",
    password:              "password#123",
    password_confirmation: "password#123")