Help us understand the problem. What is going on with this article?

モデルにパスワード属性を追加する方法

More than 5 years have passed since last update.

自分向けのメモ

Gemfileのbcryptを有効にする。

wikipedia BCrypt

gem 'bcrypt', '~> 3.1.7' # rails4.0.0のGemfileの場合

modelにpassword_digest属性を追加する

モデルを新規作成の場合
bash
rails g scaffold account email:string password_digest:string

modelにhas_scure_passwordを指定する

参考:Rails API Doc:has_secure_password

has_secure_passwordによって、以下が行われる。
- モデルにpassword,password_confirmation属性の追加
- password,password_confirmationのvalidationの追加
- authoricateメソッドの追加

#account.rb
class Account < ActiveRecord::Base
  has_secure_password
end

controllerのstrong parameterの編集

password, password_confirmationを追加。password_digestを削除。

def account_params
  params.require(:account).permit(:name, :display_name, :password, :password_confirmation, :email)
end  

view formの編集

password_digestのフィールドを削除して、passwordとpassword_confirmationに置き換える。

# 変更前
= f.label :password_digest
= f.text_field :password_digest
# 変更後
= f.label :password
= f.password_field: password
= f.label :password_confirmation
= f.password_field: password_confirmation

コントローラでの検証方法

  def create
    account = Account.find_by(name: user_params[:name])
    if account and account.authenticate(account_params[:password])
      # login.
    else
      #error.
    end
  end

参考

has_secure_passwordを読む
has_secure_passwordによるユーザ認証

hmuronaka
指針は「インターフェースに対してプログラミングするのであって、実装に対してプログラミングするのではない」。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away