LoginSignup
11
11

More than 3 years have passed since last update.

Fakerを使って6文字で英数混合のランダムパスワードを作る

Last updated at Posted at 2021-04-11

ある課題に取り組んでいて、ググって探して当て突き止めた情報を自分なりに深堀りしてみました。よろしければお付き合いください。
deviseを使ってログイン・ログアウト・新規登録を完了して次の課題である「単体テスト」をやっています。

気づき

password { Faker::Internet.password(min_length: 8) }

min_length: 最低文字数
max_length: 最大文字数
mix_case: false,   大文字を混ぜる・混ぜない
special_characters:  特殊記号入れる・入れない

これくらいしか設定できない。

Fakerで6文字で英数混合パスワードを設定するには
Faker::Internet.password使用しないと気づくところから始まります。

検索結果

ネットで検索して自分の今の知識で理解できる情報は以下です。役に立てれば嬉しいです。

Faker::Lorem.characters(min_alpha: 1, min_numric: 1)

https://endoakak.hatenablog.com/entry/2020/08/04/200000

検索目的

Fakerで単体テストコードで英数混在の6文字以上のパスワードをつくる。
*Fakerとはテストに使うダミーデータを用意するGem

ここで問題になってくるのが

factories/users.rb
password                { Faker::Internet.password(min_length: 8) }

Fakerはメールアドレス、パスワード、URL、スラッグ、IPアドレスなどをインターネット関連としてダミーデータを作成してくれるのですが、6文字の中に数値もしくは、アフファベットのいずれかだけで生成される可能性が非常に高いというリスクがあることです。

Faker::Internet.password(min_length: 8)は諦めて方向転換
*(参考)min_lengthは最低文字数を指定

他に

指定 指定内容  
special_characters: true   特殊文字を含む
special_characters: false  特殊文字含まない
mix_case: true         大文字含む
mix_case: false        大文字含まない

の設定ができます。

解決策1

参考サイト

https://github.com/faker-ruby/faker/blob/master/doc/default/lorem.md

Faker::Lorem.characters(min_alpha: 1, min_numric: 1)活躍するのがこれ
基本形(charactersというのは「文字」の意味)

Faker::Lorem.characters(number: 10) #=> "ang9cbhoa8"

指定 指定内容  
number: 10 ランダムな文字10文字を生成

Faker::Lorem.characters(number: 10, min_alpha: 4) #=> "ang9cbhoa8"

指定 指定内容  
number: 10 ランダムな文字10文字を生成
min_alpha: 4 10文字の中に最低4文字以上はアフファベットを含める

Faker::Lorem.characters(number: 10, min_alpha: 4, min_numeric: 1) #=> "ang9cbhoa8"

指定 指定内容  
number: 10 ランダムな文字10文字を生成
min_alpha: 4 10文字の中に最低4文字以上はアフファベットを含める
min_numeric: 1 10文字の中に最低1文字以上数値を含める
factories/users.r
回答例
password    { Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }

解決策2(以下参考サイト)

参考サイト

https://github.com/faker-ruby/faker/blob/master/doc/default/alphanumeric.md

指定方法は違いますが、にています。

Faker::Alphanumeric.alphanumeric(number: 10) #=> "3yfq2phxtb"

Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3) #=> "3yfq2phxtb"

Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"

*設定の説明は解決策1と同じなので割愛

ご参考までに

11
11
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
11
11