Rails ユーザーのパスワードを保存するモデルクラス を作成する

Gemfileのbcryptのコメントを外します。

gem 'bcrypt', '~> 3.1.7'


bcryptをインストールします。

$ bundle install


Userモデルクラスを作成します。

$ bin/rails g model users


Userモデルクラスに、has_secure_password を追加します。

class User < ApplicationRecord
  has_secure_password
end


マイグレーションファイルに、テーブルの項目を追加します。
このとき、暗号化したパスワードを保存する password_digest を追加します。

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :email, null: false
      t.string :password_digest

      t.timestamps
    end
  end
end


テーブルを作成します。

$ bin/rails db:migrate


railsコンソールを起動し、ユーザーデータを登録します。

$ bin/rails c
> user = User.new
> user.name = 'hikotaro"
> user.email = 'hikotaro@example.co.jp'
> user.password = 'zaq12wsx'
> user.password_confirmation = 'zaq12wsx'
> user.save


続けて、ユーザーのパスワード認証を試します。

> user.authenticate('cde34rfv')
false
> user.authenticate('zaq12wsx')
#<User id: 1, name: "hikotaro", email: "hikotaro@example.co.jp", password_digest: "$2a$12$bWRsPGrzgCac0g0IYgjW8OXshnDwaEmoIcHeJ2AP3ot...", ....