セキュアなパスワード追加
まずはハッシュ関数を使用するためGemfileに以下の行を追加する。
1 2 3 | # Gemfile # gem 'bcrypt-ruby', ‘3.0.1' 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”)
=> #<User id: 1, name: “Michael Hartl”, email: “mhartl@example.com”
created_at: “2013-03-11 20:45:19”, updated_at: “2013-03-11 20:45:19”,
password_digest: “$2a$10$kn4cQDJTzV76ZgDxOWk6Je9A0Ttn…”]]>