railsでアプリケーションを作成しており、テストユーザーログイン機能の実装を行っています。
パスワードをランダムで生成したいのですがうまくいかずにいるため助けていただきたいです。
開発環境
Ruby 2.6.5
Rails 6.0.3.3
現状のコード
controller
1class Users::SessionsController < Devise::SessionsController 2 def new_guest 3 user = User.find_or_create_by!(nickname: 'ゲストユーザー', email: 'user@example.com') do |user| 4 user.password = SecureRandom.alphanumeric 5 end 6 sign_in user 7 redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。' 8 end 9end
モデルには以下のバリデーションを設定しています
PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze validates_format_of :password, with: PASSWORD_REGEX, on: :create, message: 'には半角英字と半角数字の両方を含めて設定してください'
英数字混合のバリデーションを指定しているためSecureRandom.alphanumeric
ではエラーが生じることがあります。
そのため他の方法を調べたところSecureRandom.hex
を使うといいのではないかと思ったのですがhex文字列についてもよく理解できていません。
そこで以下2点について教えていただきたいです。
1.SecureRandom.hex
(引数は指定せず32桁のパスワードを生成する)にした場合英数字混合の文字列が必ず生成されるのでしょうか?
2.SecureRandom以外にランダムパスワード(英数字混合)を生成する方法があれば教えていただきたいです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/16 11:38