Deviseがユーザー認証用のプロジェクトの1つとどのように連携するかを試しています。管理者がユーザー名とユーザーのパスワードのバッチを時々生成できるようにする必要があるというユーザー要件があります。その後、管理者は新しいユーザー名とパスワードをユーザーに電子メールで送信します。
管理者がMySQLデータベースの直接SQLの知識を持っていると仮定すると、生成されたユーザー名/パスワードはどのようにしてDeviseによって認識されますか?ありがとう!
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
メソッドを使用して切り取っています。 。
1つのオプションは、Devise.generate_tokenを使用することです。つまり.
password = User.generate_token('password')
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password)
このオプションは、Deviseではしばらくの間利用できませんでした。他の回答(friendly_token)を参照してください。
私は_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"
_
(クイック警告:私はRails newb)
私はgenerate_tokenを試しましたが、あなたが思っていることをしません(ドキュメントを見てください)
(私はRails 3.0.5を使用しており、1.1.7を考案しています)
私が見つけたのは、Deviseは、次のことを行うと、バックグラウンドですべてのものを生成するということです。
User.create!(:email => "[email protected]", :password => "password")
Deviseはencrypted_passwordとsaltを作成する必要があります。 (コンソールを開いて試してみてください)