#はじめに
先日、ゲストログイン機能を実装したが、数回に一度エラーが出てしまうことがわかり、原因を追求した。
##ゲストログイン機能実装について
私が以前投稿した、「ゲストログイン機能の実装方法」はこちら
##エラーの原因
パスワードについてのエラーで、バリデーションによって弾かれていたので、この部分と予測。
user.password = SecureRandom.urlsafe_base64
SecureRandom.urlsafe_base64
について調べて見ると、
ランダムに、大文字英字、小文字英字、数字、記号の「-(ハイフン)」「_(アンダースコア)」を生成していることに気づいた。
そう、この記号はパスワードのバリデーションに含めていない!だから、時々、記号が含まれるパスワードがゲストログインの際に生成され、エラーとなっていた。
##解決方法
シンプルに、
user.password = '1234abcd'
と、こちらでパスワードを指定すれば、簡単に解決はできるが…
セキュリティがガバガバになってしまう。
ランダムにパスワードを生成してくれることは諦めたくない。
さらにググると、
同じようにランダム生成のSecureRandom
を使った上で、別の生成内容を見つけた。
user.password = SecureRandom.alphanumeric
これだ!!
SecureRandom.alphanumeric
は、英数字62種類の中から、ランダムに生成してくれる。
つまり、大文字英字(26種)、小文字英字(26種)、数字(10種)。
さらに、引数で文字列のサイズを指定できる。
user.password = SecureRandom.alphanumeric(6)
#=>'Ajge4l'
引数に指定すれば、バリデーションで字数に制限をかけていた場合でも、エラーにならない!!