30DAYSトライアル4th

30DAYSトライアル4th(Rails)のまとめ【DAY26(仮)】

30DAYSトライアル4th(Rails)DAY26(仮)の課題は「Progate Rails コース(11章まで)」です。
※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に進めているからです。

とうとうProgateのRailsの学習コース最後の章になります。

いままでやってきたHTMLなどよりも章が多く内容もボリューミーでヒーヒー言いながらでしたが、やっとここまできたかって感じです。

30DAYSトライアル4th(Rails)DAY26(仮)の学習内容

30DAYSトライアル4th(Rails)DAY26(仮)の学習内容は以下のとおりです。

30DAYSトライアル4th(Rails)DAY26(仮)の学習内容
  • パスワードを暗号化しよう

まさかパスワードの暗号化までProgateでやるとあ思ってなかったですね。

勝手にパスワードの暗号化は実際にアプリを作ってみる時にググりながら実装するんだろうなぁと思ってました(笑)

gemとは

RubyやRailsで「よく使う機能」をパッケージしたもので色々なものがあり、rubyやrailsにインストールして使用する。

なんかこの説明どっかで聞いたなぁと思って、自分のブログを検索してみたらSassでプログラムのようにCSSを効率的に記述する方法でgemを使ってSassをインストールした時に「gemってなんやねん」って思って調べたのが脳の片隅にに残ってたみたいです。

Railsにgemをインストールする

Railsにはインストールしたいgemを記述する「Gemfile」というファイルが存在し、「gem ‘gemの名前’」と記述することでインストールできる。

また「gem ‘gemの名前’, ‘バージョン’」とバージョンを記述することで任意のバージョンをインストールすることも可能。
※バージョンを省略した場合は最新バーションがインストールされる

「Gemfile」記述するだけではgemはインストールされないので、「Gemfile」を記述した上でターミナルで「bundle install」コマンドを実行することでインストールすることができる。

 

暗号化するためのgem:bcrypt

今回は暗号化するために「bcrypt」というgemをインストールする。

「bcrypt」をインストールすると「has_secure_passwordメソッド」が使用できるようになり、パスワード管理を行うモデルに「has_secure_passwordメソッド」を追加することで自動的にパスワードを暗号化してくれる。

「has_secure_passwordメソッド」がパスワードの存在チェックをしてくれるのでパスワードカラムに対しての存在(空)チェックのバリデーションは不要となる。

また、「has_secure_passwordメソッド」を使用して暗号化されたパスワードは「password_digest」カラムに保存されるので、カラムを予め準備しておく必要がある。

bcryptの仕組み

パスワードを暗号化する際は「password_digest」カラムに暗号化されたパスワードが保存されるが、コード上では該当モデルの「password」に代入する。
そうすることで、該当テーブルの「password_digest」カラムに保存されるので、元々のカラム名を「password」にしていた場合は、カラムがかわってもコードを修正する必要はない。

テーブルのカラム削除

マイグレーションファイルに「remove_column :モデル名, :カラム名, :データ型」と記述することで、テーブルのカラムを削除できる。
※マイグレーションファイルを修正した後に「rails db:migrate」を行うことは必要です。

暗号化されたパスワードでのログイン:authenticateメソッド

モデルに「has_secure_passwordメソッド」を追加したら、引数を暗号化して「password_digestカラム」の値とチェックする「authenticateメソッド」が使用できるようになる。

まとめ

ユーザー管理をする場合には必要不可欠なパスワードの暗号化ですが、gemを使ったら簡単に実装できるのは嬉しいですね。

Ruby、Railsをやっていくのであればgemをどうれだけ使いこなせるかがポイントになりそうです。

まさに「車輪の再開発をするな」ですね。

ProgateのRailsコースも残すは道場コース1つのみ。

頑張ります。

ABOUT ME
Jyu2
【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す