Как автоматически генерировать пароли в Rails Devise? - PullRequest
31 голосов
/ 10 сентября 2010

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

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

Ответы [ 4 ]

77 голосов
/ 29 августа 2011

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

password_length = 6
password = Devise.friendly_token.first(password_length)
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)

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

6 голосов
/ 14 декабря 2010

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

password = User.generate_token('password')
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)

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

1 голос
/ 16 января 2019

Я использую 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"

0 голосов
/ 04 марта 2011

(быстрое предостережение: я новичок в рельсах)

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

(я используюrails 3.0.5 и devise 1.1.7)

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

User.create!(:email => "me@example.com", :password => "password")

Devise должен создатьencrypted_password и соль для вас.(откройте консоль и попробуйте там)

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