【48日目】【1日20分のRailsチュートリアル】【第6章】セキュアなパスワードを追加する準備
今日は「6.3 セキュアなパスワードを追加する」から。
6.3 セキュアなパスワードを追加する
セキュアパスワードという手法では、各ユーザーにパスワードとパスワードの確認を入力させ、それを (そのままではなく) ハッシュ化したものをデータベースに保存します。
単に文字列保存するだけじゃないんだねぇ。。。
ユーザーの認証は、パスワードの送信、ハッシュ化、データベース内のハッシュ化された値との比較、という手順で進んでいきます。
ふむふむ。
6.3.1 ハッシュ化されたパスワード
セキュアなパスワードの実装は、has_secure_passwordというRailsのメソッドを呼び出すだけでほとんど終わってしまいます。
えっ。
セキュアにするの大変なんだろうなぁと思ってたらメソッドが用意されてるんだ。。。
class User < ActiveRecord::Base . . . has_secure_password end
こんな感じでUserモデルでメソッドを呼び出せばセキュアなパスワードを実装できるそう。簡単~。
この魔術的なhas_secure_password機能を使えるようにするには、1つだけ条件があります。それは、モデル内にpassword_digestという属性が含まれていることです。
今はUserモデル内にpassword_digestというカラムはないので新しく追加する。
図6.8のようなデータモデルにするために、まずはpassword_digestカラム用の適切なマイグレーションを生成します。
$ rails generate migration add_password_digest_to_users password_digest:string invoke active_record create db/migrate/20160930014537_add_password_digest_to_users.rb
マイグレーション作成できた。
db/migrate/[timestamp]_add_password_digest_to_users.rb
class AddPasswordDigestToUsers < ActiveRecord::Migration def change add_column :users, :password_digest, :string end end
データベースでマイグレーション実行。
$ bundle exec rake db:migrate == 20160930014537 AddPasswordDigestToUsers: migrating ========================= -- add_column(:users, :password_digest, :string) -> 0.0007s == 20160930014537 AddPasswordDigestToUsers: migrated (0.0008s) ================
これでpassword_digest
カラムが作成できました。
また、has_secure_passwordを使ってパスワードをハッシュ化するためには、最先端のハッシュ関数であるbcryptが必要になります。
へー。
Gemfileを更新してbundle install
を実行。
Gemfile
gem 'bcrypt', '3.1.7'
$ bundle install Installing bcrypt 3.1.7 with native extensions
bcrypt
のインストールが完了。
今日はここまで。
今日の作業時間は【19分】。
次は「6.3.2 ユーザーがセキュアなパスワードを持っている」から。