ひろしとRailsチュートリアルと - その4 : 認可, パスワード再設定

長かったチュートリアルももう終盤。。(›´ω`‹ )

認証に関わるチュートリアルが続いてなかなかのボリュームだった。

10章 (ユーザーの更新・表示・削除)

f:id:hiroshings:20180529002325p:plain

ログインしてなくても誰かのユーザー情報が編集できてしまう超絶ヤバイ状態から認可の仕組みを導入した。

フレンドリーフォワーディングでは、遷移先の保存に 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 に逃すリファクタが演習に含まれていて普通にリファクタリングの勉強になる。

パスワードリセットやアカウント有効化の実装はフロントエンドなら経験があったが、概念だけ分かってる部分もサーバーサイドの実装を経験することによってより理解が深まって良かった。