Menu

Category

Archive

logo


Ruby on Rails チュートリアル 6 章 ( 2 ) | モデル

2013-11-17 23:56:00 +0900
  • このエントリーをはてなブックマークに追加

セキュアなパスワード追加

まずはハッシュ関数を使用するためGemfileに以下の行を追加する。

1 # Gemfile
2 # gem 'bcrypt-ruby', ‘3.0.1'
3 gem 'bcrypt-ruby', 3.1.2

自分の環境では、3.0.1 では動作せず、 3.1.2をインストールすることにより動作した。 http://stackoverflow.com/questions/18541062/issues-using-bcrypt-3-0-1-with-ruby2-0-on-windows

そしてインストール。

$ bundle install

そして、新しいカラム password_digestカラム用のマイグレーションを作成する。

$ rails generate migration add_password_digest_to_users password_digest:string

上記のコマンドの最初の引数はマイグレーション名。自由に設定できるが、上のように末尾を_to_usersにしておくことをお勧めします。こうしておくと、usersテーブルにカラムを追加するマイグレーションがRailsによって自動的に作成されるため。2つ目の引数は、作成する属性の名前と型。

パスワードの確認

パスワードの入力確認は、コントローラーで行うこともできるが、モデルで行うことが慣習になっている。そのために、password属性とpassword_confirmation属性をUserモデルに追加し、レコードをデータベースに保存する前に2つの属性が一致するように要求します。

ユーザーの作成

$ rails console
>> User.create(name: "Michael Hartl", email: "mhartl@example.com",
?> password: "foobar", password_confirmation: "foobar”)

db/development.sqlite3 を SQLite Database Browser というソフトを使うことにより、中身を確認することができる。http://sourceforge.net/projects/sqlitebrowser/

また、コンソールで、

>> user = User.find_by(email: "mhartl@example.com"
>> user.password_digest
=> "$2a$10$kn4cQDJTzV76ZgDxOWk6Je9A0Ttn5sKNaGTEmT0jU7.n…"

このように確認、さらに

>> user.authenticate("invalid")
=> false
>> user.authenticate("foobar")
=> # created_at: "2013-03-11 20:45:19", updated_at: "2013-03-11 20:45:19",
password_digest: "$2a$10$kn4cQDJTzV76ZgDxOWk6Je9A0Ttn..."]]>