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

Как автоматически генерировать пароли в Rails Devise?

Я пытаюсь выяснить, как Devise работает с одним из моих проектов для аутентификации пользователей. Существует требование пользователя, чтобы их администратор мог время от времени генерировать партию имени пользователя и пароля пользователя, а затем администратор отправляет своим пользователям новые имя пользователя и пароль.

Предположим, что у администратора есть знание прямого SQL в базе данных MySQL, как могут генерироваться имена пользователей/паролей Devise? Спасибо!

4b9b3361

Ответ 1

Используйте метод Devise.friendly_token:

password_length = 6
password = Devise.friendly_token.first(password_length)
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password)

FYI: Devise.friendly_token возвращает токен из 20 символов. В приведенном выше примере мы прерываем первые password_length символы сгенерированного токена, используя метод String#first, который предоставляет Rails.

Ответ 2

Один из вариантов - использовать Devise.generate_token. То есть.

password = User.generate_token('password')
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password)

Этот параметр не был доступен в Devise довольно долгое время. Пожалуйста, обратитесь к другому ответу (friendly_token).

Ответ 3

(быстрое предупреждение: я рельс newb)

Я попробовал generate_token, но он не делает то, что вы думаете (посмотрите на документы)

(Я использую rails 3.0.5 и разрабатываю 1.1.7)

Я обнаружил, что Devise будет генерировать все это для вас в фоновом режиме, когда вы это сделаете:

User.create!(:email => "[email protected]", :password => "password")

Разработчик должен создать зашифрованный пароль и соль для вас. (поп открыть консоль и попробовать ее там)

Ответ 4

Я использую гем devise devise-security и предъявляю особые требования password_complexity:

config.password_complexity = { digit: 1, lower: 1, upper: 1 }

Если вы используете этот код: Devise.friendly_token.first(password_length) для генерации пароля, вы не всегда можете получить пароль, соответствующий вашей сложности.

Поэтому я написал генератор паролей, который будет учитывать вашу password_complexity и будет генерировать случайный пароль жалобы:

class PasswordGenerator
  include ActiveModel::Validations
  validates :password, 'devise_security/password_complexity': Devise.password_complexity
  attr_reader :password

  def initialize
    @password = Devise.friendly_token.first(Devise.password_length.first) until valid?
  end
end

Вы можете использовать его следующим образом:

PasswordGenerator.new.password # "qHc165ku"