web-dev-qa-db-ja.com

Rails Deviseでパスワードを自動生成する方法は?

Deviseがユーザー認証用のプロジェクトの1つとどのように連携するかを試しています。管理者がユーザー名とユーザーのパスワードのバッチを時々生成できるようにする必要があるというユーザー要件があります。その後、管理者は新しいユーザー名とパスワードをユーザーに電子メールで送信します。

管理者がMySQLデータベースの直接SQLの知識を持っていると仮定すると、生成されたユーザー名/パスワードはどのようにしてDeviseによって認識されますか?ありがとう!

31
ohho

Devise.friendly_token メソッドを使用します。

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

参考:Devise.friendly_tokenは20文字のトークンを返します。上記の例では、生成されたトークンの最初のpassword_length文字を、Railsが提供する String#first メソッドを使用して切り取っています。 。

77
jeanmartin

1つのオプションは、Devise.generate_tokenを使用することです。つまり.

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

このオプションは、Deviseではしばらくの間利用できませんでした。他の回答(friendly_token)を参照してください。

6
Dave Rapin

私は_devise-security_ gemを使用しており、次のような特定の_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"_

2

(クイック警告:私はRails newb)

私はgenerate_tokenを試しましたが、あなたが思っていることをしません(ドキュメントを見てください)

(私はRails 3.0.5を使用しており、1.1.7を考案しています)

私が見つけたのは、Deviseは、次のことを行うと、バックグラウンドですべてのものを生成するということです。

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

Deviseはencrypted_pa​​sswordとsaltを作成する必要があります。 (コンソールを開いて試してみてください)

0
Craig Monson