ひろしとRailsチュートリアルと - その4 : 認可, パスワード再設定
長かったチュートリアルももう終盤。。(›´ω`‹ )
認証に関わるチュートリアルが続いてなかなかのボリュームだった。
10章 (ユーザーの更新・表示・削除)
ログインしてなくても誰かのユーザー情報が編集できてしまう超絶ヤバイ状態から認可の仕組みを導入した。
フレンドリーフォワーディングでは、遷移先の保存に session
を再度利用した。
will_paginate gem
を使ってページネーションを実装したが、JSで昔スクラッチで書いたときに比べてめちゃくちゃ楽で驚いた。
before_action
を使ったフィルタ (ログイン済みチェック / 自分の編集ページかチェック)- フレンドリーフォワーディング (ログイン後、ログイン前にアクセスしようとしたページに戻してあげるやつ)
- ユーザー一覧
- ページネーション
を学んだ。
11章 (アカウントの有効化)
メーラーを使ってユーザーが本当にそのメールアドレスの持ち主なのか検証する仕組みを実装した。
- メーラーも
rails generate
で生成できる。 (plainText / html) - プレビュー用のclassが自動生成され、
config/environments/development.rb
を編集するとメールを送らなくてもメールの確認ができる←便利
ことを学んだ。
Rubyのメタプログラミングを使った抽象化を体験した。
下記の例だと、 send
メソッドで引数にシンボル名と同じStringを指定し、動的にシンボルを取得している。
まじか、黒魔術すぐる..といった感想😨
def authenticated?(remember_token) digest = self.send("remember_digest") return false if digest.nil? BCrypt::Password.new(digest).is_password?(remember_token) end
↓
def authenticated?(attribute, token) digest = send("#{attribute}_digest") return false if digest.nil? BCrypt::Password.new(digest).is_password?(token) end
12章 (パスワード再設定)
11章の振り返りのようなメーラーを使ったパスワードリセットの仕組みを作った。
ところどころ Controller
の責務過多な部分を User
モデルや SessionHelper
に逃すリファクタが演習に含まれていて普通にリファクタリングの勉強になる。
パスワードリセットやアカウント有効化の実装はフロントエンドなら経験があったが、概念だけ分かってる部分もサーバーサイドの実装を経験することによってより理解が深まって良かった。