2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ゲストログイン機能でたまに、パスワードエラーが出ていたが、解決した

Posted at

#はじめに
 先日、ゲストログイン機能を実装したが、数回に一度エラーが出てしまうことがわかり、原因を追求した。

##ゲストログイン機能実装について

 私が以前投稿した、「ゲストログイン機能の実装方法」はこちら

##エラーの原因
パスワードについてのエラーで、バリデーションによって弾かれていたので、この部分と予測。

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'

引数に指定すれば、バリデーションで字数に制限をかけていた場合でも、エラーにならない!!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?