管理画面のアカウント等、管理者が生成して利用者にアカウントを配布するような運用はあると思うのですが、管理者がアカウントを作成する際にパスワードまで指定するようにしてしまうと、管理者によるなりすましの懸念があります。。。
そのためアカウント作成時には利用者のメールアドレスのみを指定して、パスワードは内部で生成した予測不能な文字列を設定したほうがセキュアです。
やり方は以下のような形で、Devise.friendly_token
が渡された引数の文字数で予測不能なセキュアな文字列を生成してくれます。
generated_password = Devise.friendly_token(12) admin = Admin.create!(:email => email, :password => generated_password)
内部的にはSecureRandom
を使ってURLSafeな文字列を生成して、紛らわしい文字列は置換しているようですね👀
def self.friendly_token(length = 20) # To calculate real characters, we must perform this operation. # See SecureRandom.urlsafe_base64 rlength = (length * 3) / 4 SecureRandom.urlsafe_base64(rlength).tr('lIO0', 'sxyz') end
Deviseは便利なメソッドがありますね✨
参考