30DAYSトライアル4th(Rails)DAY26(仮)の課題は「Progate Rails コース(11章まで)」です。
※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に進めているからです。
とうとうProgateのRailsの学習コース最後の章になります。
いままでやってきたHTMLなどよりも章が多く内容もボリューミーでヒーヒー言いながらでしたが、やっとここまできたかって感じです。
目次
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」コマンドを実行することでインストールすることができる。
1 2 3 4 5 |
# 最新バージョンをインストール gem 'gemの名前' # 任意のバージョンをインストール gem 'gemの名前', 'バージョン' |
暗号化するためのgem:bcrypt
今回は暗号化するために「bcrypt」というgemをインストールする。
「bcrypt」をインストールすると「has_secure_passwordメソッド」が使用できるようになり、パスワード管理を行うモデルに「has_secure_passwordメソッド」を追加することで自動的にパスワードを暗号化してくれる。
1 2 3 4 |
class モデル名 < ApplicationRecord has_secure_password end |
「has_secure_passwordメソッド」がパスワードの存在チェックをしてくれるのでパスワードカラムに対しての存在(空)チェックのバリデーションは不要となる。
また、「has_secure_passwordメソッド」を使用して暗号化されたパスワードは「password_digest」カラムに保存されるので、カラムを予め準備しておく必要がある。
bcryptの仕組み
パスワードを暗号化する際は「password_digest」カラムに暗号化されたパスワードが保存されるが、コード上では該当モデルの「password」に代入する。
そうすることで、該当テーブルの「password_digest」カラムに保存されるので、元々のカラム名を「password」にしていた場合は、カラムがかわってもコードを修正する必要はない。
テーブルのカラム削除
マイグレーションファイルに「remove_column :モデル名, :カラム名, :データ型」と記述することで、テーブルのカラムを削除できる。
※マイグレーションファイルを修正した後に「rails db:migrate」を行うことは必要です。
1 |
remove_column :モデル名, :カラム名, :データ型 |
暗号化されたパスワードでのログイン:authenticateメソッド
モデルに「has_secure_passwordメソッド」を追加したら、引数を暗号化して「password_digestカラム」の値とチェックする「authenticateメソッド」が使用できるようになる。
1 |
変数.authenticate("比較文字列") |
まとめ
ユーザー管理をする場合には必要不可欠なパスワードの暗号化ですが、gemを使ったら簡単に実装できるのは嬉しいですね。
Ruby、Railsをやっていくのであればgemをどうれだけ使いこなせるかがポイントになりそうです。
まさに「車輪の再開発をするな」ですね。
ProgateのRailsコースも残すは道場コース1つのみ。
頑張ります。