はじめに
ゲストログイン時のパスワード生成の際に時折エラーが出るので
原因を追求し解決しました。
現状のコード
ランダム英数字でパスワードを生成したいと思い下記のコードを記述していました。
user.password = SecureRandom.urlsafe_base64
なぜエラーになるか原因を探すためSecureRandom.urlsafe_base64
について
調べたところ、ランダムに、大文字英字、小文字英字、数字、記号の-(ハイフン)」
「_(アンダースコア)」を生成していることに気づきました。
記号はバリデーションに含めてなかったため、パスワード内に記号が生成される度に
エラーが発生していました。
解決方法
- ランダム英数字混合のパスワードにしたい
上記内容で別表現の方法を見つけました。
user.password = SecureRandom.alphanumeric
SecureRandom.alphanumeric
は、英数字62種類の中から、
ランダムに生成してくれます。
さらに、引数で文字列のサイズを指定できる。
user.password = SecureRandom.alphanumeric(8)
上記では引数に(8)を指定し文字列を8に指定しました。
まとめ
SecureRandom.urlsafe_base64
では記号も含まれることを知らず
エラー原因の解決に時間がかかり悩んでいましたが、
無事、解決ができました。
検索力は大事だなと改めて痛感しました。