読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【48日目】【1日20分のRailsチュートリアル】【第6章】セキュアなパスワードを追加する準備

Ruby on Railsチュートリアル(第3版)

今日は「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 ユーザーがセキュアなパスワードを持っている」から。