SlideShare a Scribd company logo
RUBY ON RAILS 3 Tutorial  を日本語訳してみた Chapter 5-7 2011/11/10
おさらい 前回 Chapter4 を軽く飛ばしました rails console コマンドの話 Ruby の文法的部分の話だったので、このまま飛ばします Chapter3 では TDD(Test Driven Development)
目次 Chapter1 Rails 導入からデプロイ Chapter2  デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5  スタイルを追加する Chapter6 User Model と View  その 1 Chapter7 User Model と View  その 2
目次 Chapter8  ユーザ登録 Chapter9  ログイン・ログアウト Chapter10  ユーザデータの更新・編集・追加 Chapter11  ミニブログ ( ツイート ) Chapter12  ユーザのフォロー
Chapter5 Filling in the Layout CSS を追加する話 レイアウトの話なので、気になった所のみ
5.2.1 Integration Tests routes.rb を触る前に Integration test( 結合テスト ) を行う テスト用 spec ファイル作成 ※ RSpec では integration tests のことを request specs と言う $ rails generate integration_test layout_links invoke  rspec create   spec/requests/layout_links_spec.rb
5.2.1 Integration Tests spec/requests/layout_links_spec.rb  に以下のテストを追加 describe   " GET 'home' "   do    it   " should be successful "   do      get   ' home '      response .should be_success    end end
5.2.1 Integration Tests 自動でテストが実行されない場合 .autotest に追加 Mac OS X の場合 Autotest . add_hook   :initialize   do   | autotest | autotest . add_mapping( /^spec\/requests\/.*_spec\.rb$/ )   do autotest . files_matching( /^spec\/requests\/.*_spec\.rb$/ ) end end
5.2.1 Integration Tests Ubuntu か Linux の場合 Autotest . add_hook   :initialize   do   | autotest| autotest . add_mapping( %r%^spec/(requests)/.*rb$% )   do | filename,   _ | filename end end    
5.2.2 Rails Routes URL マッピングは config/routes.rb で routes.rb 例: :to => ‘ コントローラ名 # アクション名’ SampleApp :: Application .routes.draw   do    match   ' /contact ' ,   :to  =>   ' pages#contact '    match   ' /about ' ,     :to  =>   ' pages#about '    match   ' /help ' ,     :to  =>   ' pages#help ' end  
5.4 Conclusion CSS の当て方 route.rb の使い方 link_to の使いかた
目次 Chapter1 Rails 導入からデプロイ Chapter2  デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5  スタイルを追加する Chapter6 User Model と View  その 1 Chapter7 User Model と View  その 2
Chapter6 Modeling and Viewing Users, PartⅠ ( 前提 ) ユーザがログインするシステムを作っている途中 ユーザモデルの作成 DB のテーブル作成 バリデーション
Box 6.1  Roll Your Own Authentication System OpenID や OAuth Rails に備わっている認証モジュール それらを使わずに認証を自作すべし
Rails の認証に答えが無いから チュートリアルで扱っても時代遅れになる可能性 正しい方法を示しても、古くなってしまう Rails と認証の両方の勉強になる Box 6.1  Roll Your Own Authentication System
6.1.1 Database Migration User コントローラ作成 (new アクション付き ) User モデル作成 (name と email を持っている ) $ rails g controller Users new $ rails g model User name:string email:string
6.1.1 Database Migration DB 作成 DB 削除 $ bundle exec rake db:migrate $ bundle exec rake db:rollback “ bundle exec を使うと、 BUNDLE_PATH 以下の gem を使って、スクリプトを実行できます。” ( http://d.hatena.ne.jp/mirakui/20100703/1278165723 )
6.1.2 The Model File Model Annotation annotate という gem を入れる Gemfile に’ annotate’ 追加 ※ 注意  :git=> 以下を追加しないと 3.1 系で動かない https://github.com/ctran/annotate_models/issues/28 group  :development   do    gem   ' rspec-rails '    gem   ' annotate ' ,  :git  =>  ' git://github.com/ctran/annotate_models.git ' end  
6.1.2 The Model File 実行結果 $ bundle exec annotate --position before # == Schema Information # # Table name: users # #  id         :integer         not null, primary key #  name       :string(255) #  email      :string(255) #  created_at :datetime #  updated_at :datetime # class   User  <  ActiveRecord :: Base end   追加されている
6.1.3 Creating user objects --sandbox で DB には変更を加えない -f オプションで常に最新のログを見れる $ rails console --sandbox $ tail –f log/development.log
6.2 User Validations  TDD のため、 development DB の 構造 を test DB に反映させる $ bundle exec rake db:test:prepare
6.2.3 Format Validation email 等のバリデーション用正規表現 Rubular(http://rubular.com/) 正規表現の入力  ->マッチするか確認
6.2.3 Format Validation 余談 (Gmail の場合 ) 例えば… + やスペースなどのメールアドレスに使えない記号もバリデーションで許可必要 test@gmail.com == test+hoge@gmail + から @ 前までが無視される
6.3.1 Debug and Rails Environments Rails の環境 test( テスト用 ) development( 開発用 ) app 以下のコード変更が常に反映される production( 本番環境 ) コード変更反映にはサーバーの再起動必要。こちらのほうが早い http://d.hatena.ne.jp/zariganitosh/20070108/1168246932
6.3.1 Debug and Rails Environments Rails console のデフォルトは development console で以下のメソッドで確認可能 >> Rails.env => “development” >> Rails.env.development? => “true” >> Rails.env.test? => “false”
6.3.1 Debug and Rails Environments 環境を指定して実行出来る Rails を動かすときも環境指定可能 $ rails console test $ rails server --environment production
6.3.1 Debug and Rails Environments production 環境の DB を構築する ちなみに heroku console で試すと、 Heroku は production 環境であることが分かる $ bundle exec rake db:migrate RAILS_ENV=production
目次 Chapter1 Rails 導入からデプロイ Chapter2  デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5  スタイルを追加する Chapter6 User Model と View  その 1 Chapter7 User Model と View  その 2
ユーザのログイン周り パスワード暗号化 ユーザの個人ページ作成 Gravatar を利用する gem Chapter7 Modeling and Viewing Users, PartⅡ
7.2.2 Some Secure Password Theory ユーザのログイン パスワードハッシュ化して比較
7.2.2 Some Secure Password Theory $ rails console   >>  require   'digest'   >>  def   secure_hash (string)   >>  Digest :: SHA2 . hexdigest(string)   >>  end >>  password   =   &quot;secret&quot;   >>  encrypted_password   =   secure_hash(password)   “ 2bb80d537b1da3e38bd30361aa85…( 省略 )&quot;   >>  submitted_password   =   &quot;secret&quot;   >>  encrypted_password   ==   secure_hash(submitted_password)   => true    
7.2.2 Some Secure Password Theory rainbow attack ( 事前計算攻撃 / レインボー攻撃 ) http://michisugara-aud.sakura.ne.jp/lectures/lectures_25.html パスワードが類推される可能性がある -> salt ( 今回は現在時刻の文字列 ) を利用する ハッシュ関数 (pass) を ハッシュ関数 ( 時刻 +pass) に
7.2.2 Some Secure Password Theory >>  Time . now . utc   => Fri Jan 29 18:11:27 UTC 2010   >>  password   =   &quot;secret&quot;   => &quot;secret&quot;   >>  salt   =   secure_hash( &quot; #{ Time . now . utc } -- #{ password } &quot; )   => &quot;d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8&quot;   >>  encrypted_password   =   secure_hash( &quot; #{ salt } -- #{ password } &quot; )   => &quot;69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847&quot;     ※ 明確にするため、ハッシュ化する文字列は” --” で区切られるらしい
7.2.3 Implementing has_password? User モデルに salt フィールド追加する migration の設定 db/migrate/<timestamp>_add_salt_to_users.rb が作成される migration 名 (add_password_to_users) は自由 ※ _to_users にしておくと、自動で User に追加される!便利! $ rails generate migration add_password_to_users encrypted_password:string
作成した migration の実行 7.2.3 Implementing has_password? $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare sqlite> .schema CREATE TABLE &quot;schema_migrations&quot; (&quot;version&quot; varchar(255) NOT NULL); CREATE TABLE &quot;users&quot; (&quot;id&quot; INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, &quot;name&quot; varchar(255), &quot;email&quot; varchar(255), &quot;created_at&quot; datetime, &quot;updated_at&quot; datetime,  &quot;salt&quot; varchar(255));
7.3.2 A Name and a Gravatar Gemfile に gravatar_image_tag 追加 Gravatar(http://gravatar.com) を利用する gem <%= gravatar_image_tag ‘email’ %> これだけで、登録された email のアイコンを表示してくれる       ← Gravatar に登録がない場合に表示される
今回のまとめ 5 章では CSS の導入的な話 User モデルの作り方について、 6 ・ 7 章だった 全体的にざっくり削った Tutorial ではちゃんとテストする過程がある RSpec のコードも載っていたが割愛 Heroku ・ Git も使っている ( 章毎に push している )
次回予告 8 章  Sign Up  新規登録 9 章  Sign In, Sign Outs  セッション周り 10 章  Updating, Showing, and Deleting Users うまく行けば、次の次の回で最終回…? ( 全 12 章 )

More Related Content

What's hot (19)

PPT
Apache Module
Tomohiro Ikebe
 
PPT
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
KEY
Play勉強会 第3回
Daisuke Kasuya
 
KEY
プラガブル Play20 Scala
Kazuhiro Sera
 
PDF
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
Toshimichi Suekane
 
KEY
Rails and twitter #twtr_hack
i7a
 
PPT
ASP.NET MVC 1.0
Shinpei Ohtani
 
PDF
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
PDF
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
 
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Toshiaki Maki
 
KEY
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
 
PPTX
Zabbixを2分でインストール
真乙 九龍
 
PDF
Gulp入門 - コーディングを10倍速くする
Hayashi Yuichi
 
PDF
Redmine Ansible
ITO Yoshiichi
 
PDF
G * magazine 1
Tsuyoshi Yamamoto
 
PDF
Ansible 2.8 アップデート情報 -機能追加と注意点-
akira6592
 
PDF
Bot Framework v4 開発 Tips 2018-11
Atsushi Yokohama (BEACHSIDE)
 
PDF
Spring Framework ふりかえりと4.3新機能
kimulla
 
PPTX
20141017 introduce razor
do_aki
 
Apache Module
Tomohiro Ikebe
 
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
Play勉強会 第3回
Daisuke Kasuya
 
プラガブル Play20 Scala
Kazuhiro Sera
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
Toshimichi Suekane
 
Rails and twitter #twtr_hack
i7a
 
ASP.NET MVC 1.0
Shinpei Ohtani
 
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Toshiaki Maki
 
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
 
Zabbixを2分でインストール
真乙 九龍
 
Gulp入門 - コーディングを10倍速くする
Hayashi Yuichi
 
Redmine Ansible
ITO Yoshiichi
 
G * magazine 1
Tsuyoshi Yamamoto
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
akira6592
 
Bot Framework v4 開発 Tips 2018-11
Atsushi Yokohama (BEACHSIDE)
 
Spring Framework ふりかえりと4.3新機能
kimulla
 
20141017 introduce razor
do_aki
 

Similar to Ruby on Rails Tutorial Chapter5-7 (20)

PDF
Rails Controller Fundamentals
Takashi SAKAGUCHI
 
PPT
Ruby on Rails Tutorial Chapter11-13
Sea Mountain
 
PDF
deviseを利用した認証について@Minamirb
Jun Fukaya
 
PDF
Rubykansai 81
Satomi Tsujita
 
PPT
Ruby on Rails3 Tutorial Chapter1
Sea Mountain
 
PDF
Rails3.1rc4を試してみた
Takahiro Hidaka
 
PDF
Rails解説セミナー: Railsアプリケーションのデバッグ
Yohei Yasukawa
 
PDF
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
PDF
First step of Rails Contribute‎ #shibuyarb
Go Sueyoshi (a.k.a sue445)
 
PPTX
Tech fun rails_workshop
OMEGA (@equal_001)
 
PPTX
フレームワーク品評会 Ruby on Rails #crossjp
Shiro Fukuda
 
PPTX
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
 
PDF
はじめての Rails アプリ開発
n-fukidome
 
PDF
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Kosuke Tanabe
 
PDF
Rails初心者レッスン lesson2 3edition
Satomi Tsujita
 
PDF
nomlab_okayamaruby_slide
nomlab
 
PPTX
そんな装備で大丈夫か?
2celeb
 
PPTX
そんな装備で大丈夫か?
2celeb
 
PDF
Ruby on Rails 入門
Yasuko Ohba
 
PDF
Railsハイパー実践講座-第35回NaCl勉強会
Narihiro Nakamura
 
Rails Controller Fundamentals
Takashi SAKAGUCHI
 
Ruby on Rails Tutorial Chapter11-13
Sea Mountain
 
deviseを利用した認証について@Minamirb
Jun Fukaya
 
Rubykansai 81
Satomi Tsujita
 
Ruby on Rails3 Tutorial Chapter1
Sea Mountain
 
Rails3.1rc4を試してみた
Takahiro Hidaka
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Yohei Yasukawa
 
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
First step of Rails Contribute‎ #shibuyarb
Go Sueyoshi (a.k.a sue445)
 
Tech fun rails_workshop
OMEGA (@equal_001)
 
フレームワーク品評会 Ruby on Rails #crossjp
Shiro Fukuda
 
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
 
はじめての Rails アプリ開発
n-fukidome
 
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Kosuke Tanabe
 
Rails初心者レッスン lesson2 3edition
Satomi Tsujita
 
nomlab_okayamaruby_slide
nomlab
 
そんな装備で大丈夫か?
2celeb
 
そんな装備で大丈夫か?
2celeb
 
Ruby on Rails 入門
Yasuko Ohba
 
Railsハイパー実践講座-第35回NaCl勉強会
Narihiro Nakamura
 
Ad

Recently uploaded (7)

PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
PDF
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Ad

Ruby on Rails Tutorial Chapter5-7

  • 1. RUBY ON RAILS 3 Tutorial を日本語訳してみた Chapter 5-7 2011/11/10
  • 2. おさらい 前回 Chapter4 を軽く飛ばしました rails console コマンドの話 Ruby の文法的部分の話だったので、このまま飛ばします Chapter3 では TDD(Test Driven Development)
  • 3. 目次 Chapter1 Rails 導入からデプロイ Chapter2 デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5 スタイルを追加する Chapter6 User Model と View その 1 Chapter7 User Model と View その 2
  • 4. 目次 Chapter8 ユーザ登録 Chapter9 ログイン・ログアウト Chapter10 ユーザデータの更新・編集・追加 Chapter11 ミニブログ ( ツイート ) Chapter12 ユーザのフォロー
  • 5. Chapter5 Filling in the Layout CSS を追加する話 レイアウトの話なので、気になった所のみ
  • 6. 5.2.1 Integration Tests routes.rb を触る前に Integration test( 結合テスト ) を行う テスト用 spec ファイル作成 ※ RSpec では integration tests のことを request specs と言う $ rails generate integration_test layout_links invoke rspec create spec/requests/layout_links_spec.rb
  • 7. 5.2.1 Integration Tests spec/requests/layout_links_spec.rb  に以下のテストを追加 describe   &quot; GET 'home' &quot;   do    it   &quot; should be successful &quot;   do      get   ' home '      response .should be_success    end end
  • 8. 5.2.1 Integration Tests 自動でテストが実行されない場合 .autotest に追加 Mac OS X の場合 Autotest . add_hook :initialize do | autotest | autotest . add_mapping( /^spec\/requests\/.*_spec\.rb$/ ) do autotest . files_matching( /^spec\/requests\/.*_spec\.rb$/ ) end end
  • 9. 5.2.1 Integration Tests Ubuntu か Linux の場合 Autotest . add_hook :initialize do | autotest| autotest . add_mapping( %r%^spec/(requests)/.*rb$% ) do | filename, _ | filename end end  
  • 10. 5.2.2 Rails Routes URL マッピングは config/routes.rb で routes.rb 例: :to => ‘ コントローラ名 # アクション名’ SampleApp :: Application .routes.draw   do    match   ' /contact ' ,   :to  =>   ' pages#contact '    match   ' /about ' ,     :to  =>   ' pages#about '    match   ' /help ' ,     :to  =>   ' pages#help ' end  
  • 11. 5.4 Conclusion CSS の当て方 route.rb の使い方 link_to の使いかた
  • 12. 目次 Chapter1 Rails 導入からデプロイ Chapter2 デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5 スタイルを追加する Chapter6 User Model と View その 1 Chapter7 User Model と View その 2
  • 13. Chapter6 Modeling and Viewing Users, PartⅠ ( 前提 ) ユーザがログインするシステムを作っている途中 ユーザモデルの作成 DB のテーブル作成 バリデーション
  • 14. Box 6.1 Roll Your Own Authentication System OpenID や OAuth Rails に備わっている認証モジュール それらを使わずに認証を自作すべし
  • 15. Rails の認証に答えが無いから チュートリアルで扱っても時代遅れになる可能性 正しい方法を示しても、古くなってしまう Rails と認証の両方の勉強になる Box 6.1 Roll Your Own Authentication System
  • 16. 6.1.1 Database Migration User コントローラ作成 (new アクション付き ) User モデル作成 (name と email を持っている ) $ rails g controller Users new $ rails g model User name:string email:string
  • 17. 6.1.1 Database Migration DB 作成 DB 削除 $ bundle exec rake db:migrate $ bundle exec rake db:rollback “ bundle exec を使うと、 BUNDLE_PATH 以下の gem を使って、スクリプトを実行できます。” ( http://d.hatena.ne.jp/mirakui/20100703/1278165723 )
  • 18. 6.1.2 The Model File Model Annotation annotate という gem を入れる Gemfile に’ annotate’ 追加 ※ 注意 :git=> 以下を追加しないと 3.1 系で動かない https://github.com/ctran/annotate_models/issues/28 group  :development   do    gem   ' rspec-rails '    gem   ' annotate ' ,  :git  =>  ' git://github.com/ctran/annotate_models.git ' end  
  • 19. 6.1.2 The Model File 実行結果 $ bundle exec annotate --position before # == Schema Information # # Table name: users # #  id         :integer         not null, primary key #  name       :string(255) #  email      :string(255) #  created_at :datetime #  updated_at :datetime # class   User  <  ActiveRecord :: Base end   追加されている
  • 20. 6.1.3 Creating user objects --sandbox で DB には変更を加えない -f オプションで常に最新のログを見れる $ rails console --sandbox $ tail –f log/development.log
  • 21. 6.2 User Validations TDD のため、 development DB の 構造 を test DB に反映させる $ bundle exec rake db:test:prepare
  • 22. 6.2.3 Format Validation email 等のバリデーション用正規表現 Rubular(http://rubular.com/) 正規表現の入力  ->マッチするか確認
  • 23. 6.2.3 Format Validation 余談 (Gmail の場合 ) 例えば… + やスペースなどのメールアドレスに使えない記号もバリデーションで許可必要 [email protected] == test+hoge@gmail + から @ 前までが無視される
  • 24. 6.3.1 Debug and Rails Environments Rails の環境 test( テスト用 ) development( 開発用 ) app 以下のコード変更が常に反映される production( 本番環境 ) コード変更反映にはサーバーの再起動必要。こちらのほうが早い http://d.hatena.ne.jp/zariganitosh/20070108/1168246932
  • 25. 6.3.1 Debug and Rails Environments Rails console のデフォルトは development console で以下のメソッドで確認可能 >> Rails.env => “development” >> Rails.env.development? => “true” >> Rails.env.test? => “false”
  • 26. 6.3.1 Debug and Rails Environments 環境を指定して実行出来る Rails を動かすときも環境指定可能 $ rails console test $ rails server --environment production
  • 27. 6.3.1 Debug and Rails Environments production 環境の DB を構築する ちなみに heroku console で試すと、 Heroku は production 環境であることが分かる $ bundle exec rake db:migrate RAILS_ENV=production
  • 28. 目次 Chapter1 Rails 導入からデプロイ Chapter2 デモアプリ (scaffold 使用 ) Chapter3 Web アプリケーション Chapter4 Rails 風 Ruby Chapter5 スタイルを追加する Chapter6 User Model と View その 1 Chapter7 User Model と View その 2
  • 29. ユーザのログイン周り パスワード暗号化 ユーザの個人ページ作成 Gravatar を利用する gem Chapter7 Modeling and Viewing Users, PartⅡ
  • 30. 7.2.2 Some Secure Password Theory ユーザのログイン パスワードハッシュ化して比較
  • 31. 7.2.2 Some Secure Password Theory $ rails console >> require 'digest' >> def secure_hash (string) >> Digest :: SHA2 . hexdigest(string) >> end >> password = &quot;secret&quot; >> encrypted_password = secure_hash(password) “ 2bb80d537b1da3e38bd30361aa85…( 省略 )&quot; >> submitted_password = &quot;secret&quot; >> encrypted_password == secure_hash(submitted_password) => true  
  • 32. 7.2.2 Some Secure Password Theory rainbow attack ( 事前計算攻撃 / レインボー攻撃 ) http://michisugara-aud.sakura.ne.jp/lectures/lectures_25.html パスワードが類推される可能性がある -> salt ( 今回は現在時刻の文字列 ) を利用する ハッシュ関数 (pass) を ハッシュ関数 ( 時刻 +pass) に
  • 33. 7.2.2 Some Secure Password Theory >> Time . now . utc => Fri Jan 29 18:11:27 UTC 2010 >> password = &quot;secret&quot; => &quot;secret&quot; >> salt = secure_hash( &quot; #{ Time . now . utc } -- #{ password } &quot; ) => &quot;d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8&quot; >> encrypted_password = secure_hash( &quot; #{ salt } -- #{ password } &quot; ) => &quot;69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847&quot;   ※ 明確にするため、ハッシュ化する文字列は” --” で区切られるらしい
  • 34. 7.2.3 Implementing has_password? User モデルに salt フィールド追加する migration の設定 db/migrate/<timestamp>_add_salt_to_users.rb が作成される migration 名 (add_password_to_users) は自由 ※ _to_users にしておくと、自動で User に追加される!便利! $ rails generate migration add_password_to_users encrypted_password:string
  • 35. 作成した migration の実行 7.2.3 Implementing has_password? $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare sqlite> .schema CREATE TABLE &quot;schema_migrations&quot; (&quot;version&quot; varchar(255) NOT NULL); CREATE TABLE &quot;users&quot; (&quot;id&quot; INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, &quot;name&quot; varchar(255), &quot;email&quot; varchar(255), &quot;created_at&quot; datetime, &quot;updated_at&quot; datetime, &quot;salt&quot; varchar(255));
  • 36. 7.3.2 A Name and a Gravatar Gemfile に gravatar_image_tag 追加 Gravatar(http://gravatar.com) を利用する gem <%= gravatar_image_tag ‘email’ %> これだけで、登録された email のアイコンを表示してくれる       ← Gravatar に登録がない場合に表示される
  • 37. 今回のまとめ 5 章では CSS の導入的な話 User モデルの作り方について、 6 ・ 7 章だった 全体的にざっくり削った Tutorial ではちゃんとテストする過程がある RSpec のコードも載っていたが割愛 Heroku ・ Git も使っている ( 章毎に push している )
  • 38. 次回予告 8 章 Sign Up 新規登録 9 章 Sign In, Sign Outs セッション周り 10 章 Updating, Showing, and Deleting Users うまく行けば、次の次の回で最終回…? ( 全 12 章 )

Editor's Notes

  • #11: こんな感じで書けます localhost:3000 にアクセスしたときに何を表示させるかということも root :to =&gt; “hoge#huga” で設定できる 色々あるから調べてみてね。 routes.rb 自体にコメントアウトで設定が描かれているから、それを見るのも早いかも
  • #39: ----- 会議メモ (11/11/09 20:52) ----- annotate は アジャイル開発の…本を書いた人がつくった gem migrate のバージョンが書かれてしまう モデルを変更したバージョンが  全部のモデルが更新がかかる 問題があった。今のバージョンはそれが無いように見えるが、確認する必要あり。