自分の手で未来を創るーlav0

自分のために、誰かのために、今ここにないもの、もっと良くしたいもの、何でも自分の手で創っていく。そして、作ったものを公開していきます

Rails 6.0 でアプリを開発 基本の流れ④ セキュアなパスワード

今回はUser認証を行うセキュアなパスワードを設定するためのメモ。

f:id:kslabo51:20200218221104j:plain

 

ハッシュ化

セキュリティのために生のパスワードをDBに保存しないことが大事

ハッシュ関数を使って入力されたデータをもとに戻せない(不可逆な)データにする処理を行う。

 

ユーザー認証(authenticate)

この辺、少し言葉がごちゃごちゃする。上記のハッシュ化をユーザー認証(authenticate)するのに使う。その流れは、

 

①パスワードの送信

②パスワードのハッシュ化

③DB内のハッシュ化された値との比較

④一致すればユーザー認証(authenticate)

 

手順

1.マイグレーションファイルの作成

ハッシュ化したパスワードを保存するためのpassword_digest属性を作成

$ rails g migration add_password_digest_to_users password_digest:string

$ rails db:migrate

 

2.gem bycriptを追加

bycriptはhas_secure_passwordを使用するためのgem

f:id:kslabo51:20200218214657p:plain

※6.0でもgemファイルの中に#化されているので復活させる

 

3.セキュアなパスワードの実装

f:id:kslabo51:20200218215101p:plain

 

これにより

①ハッシュ化したパスワードをDB内に先ほど作成したのpassword_digestに保存する。

※digestとは暗号化用ハッシュ関数という語源らしい

②2つの仮想的な属性(passwordとpassword_confirmation)が使える

③存在性と値が一致するかどうかのバリデーションも追加される

④authenticateメソッドが使えるようになる

authenticateメソッドとは引数の文字列がパスワードと一致するとそのオブジェクトを返し、間違っているとfalseを返すメソッド

 

4.テスト

上記3の③でhas_secure_passwordを設置したために強制的に追加されたバリデーションを通すためにtestのsetupメソッド内に上記3の②で使えるようになったpasswordとpassword_confirmationを追加する

f:id:kslabo51:20200218215323p:plain

これによりテストが成功する

 

5.パスワードの存在性と最小文字を設定

①テストでブランクを不可とするか存在性を確かめる

②テストで最小文字数にあたらないかを確かめる

f:id:kslabo51:20200218215456p:plain

③上記に沿ってuser.rbにバリデーションを設定する

f:id:kslabo51:20200218215523p:plain

これでこのテストも通る

 

6.authenticateメソッドが使えるようになっているか確認

上記3の④のauthenticateメソッドが使えるようになっているかチェック

rails consoleに入る

②user = User.create(name: "hoge", email: "hoge@hoge.com", password: "hogehoge", password_confirmation: "hogehoge")

③user.password_digest

④user.authenticate("hogehoge") ←正しいパスワード

f:id:kslabo51:20200218215842p:plain

※パスワードとか違うものを使っているが正しくかえってきているので認証成功!

 

補足.演習について

ちなみにrails tutorialの演習6-3-4-3の方法が気になったのでついでに

セキュアなパスワードを設定した際にこのソールで名前のみ変更する方法

user.update_attribute(:name, "hogetaro")

※attributesではなく、attributeであることに注意

 

update_attribute: 1つの属性のみを更新・保存するメソッド

update_attirbutes: 複数の属性をまとめて更新・保存するメソッド

 

 

参考にさせていただいたサイト

第6章 ユーザーのモデルを作成する - Railsチュートリアル

【Rails入門】update_attributesで更新する方法をわかりやすく解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

※↑↑これがかなりまとめられている!

ruby on rails - update_attributeの実行方法について - スタック・オーバーフロー