ひろしとRailsチュートリアルと - その3 : アカウント作成, ログイン

本業のiOS開発がバタバタしていて、前回から2週間空いてしまった。 今日は7, 8, 9章を進めた。

7章

ユーザーページの作成とアカウント作成画面を実装した。

  • debugメソッド
  • Railsが用意している環境3つ(test, development, production)
  • User.find(params[:id])してユーザーページの表示
  • ユーザーのGravatarを表示する初めてのヘルパーメソッド
  • formでpost -> createメソッドでパラメータを受け取ってControllerでロジック実装
  • エラーハンドリング
  • Strong Prameters
  • 本番環境でSSLを使う方法

を学んだ。

サイトにデバッグ情報を出力できる debug(params) メソッド。 アプリで同じようなことをやろうとすると、ライブラリを使うか、log出力用の関数を自分で書かないといけないので、こういった需要に応じたメソッドが用意されてるのはフレームワークの素晴らしさだと思った。

Strong Parameters を使うことで、paramsハッシュのパラメータを指定できること。これを使わないとcurlとかで容易に悪意あるリクエストが送れることを学んだ。

なんかこの章めっちゃ長くて、Togglで勉強時間を計測しているのだが、3時間半近くかかって疲れた。。

8章

7章(アカウント作成)の知見が活かせて、1/3の時間で終わった。

  • ログイン
  • ログアウト
  • SessionsHelper moduleを定義して、session管理のヘルパーメソッドを実装
  • Sessionに応じた画面の出しわけ
  • ||= 演算子を使った代入

を学んだ。

||= 演算子は左辺がnilだったら右辺で代入するやつで、swiftの ?? 演算子みたいな感じで便利だなと思った。

9章

cookieを使ったsessionの永続化を学んだ。なんとなく知識として分かってはいたが、体系的に自分で実装して学べてよかった。 以下、簡易メモ

セッションの保持

  1. tokenをBase64を使って発行
  2. tokenをハッシュ値に変換
  3. DBに保存
  4. cookieに署名付きcookieを使ってuser_idを保存
  5. cookieにハッシュ化したtokenを保存

ログイン時

  1. cookieからuser_idを取得する
  2. user_idでDBからユーザーを取ってくる
  3. 2のuserのハッシュ化したtokenとcookieに保存しているtokenが一致しているか確かめる

途中、cookieにtokenを保存する箇所で盛大にバグを埋め込んでて、そのまま気づかず過ごしていたのだが章の終盤のテストでバグが明らかになって、テストの素晴らしさを体感した。

作業環境

外で作業するときに、家と違ってサブディスプレイがないのがツラみだったのだが、iPadをサブディスプレイ化する Duet Displayというアプリを見つけて、買ってみたら遅延なくて最高だった。ノマドワークが捗りそう。