0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セキュアなパスワードを追加

Posted at

追加する方法は簡単で、modelにhas_secure_passwordを追加するだけ。
追加することによって次のような機能を使えるようになる。

・ セキュアにハッシュ化したパスワードを、データベース内のpassword_digest属性に保存できるようになる。
・ 2つの仮想的な属性(passwordとpassword_confirmation)が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される。
・ authenticateメソッドが使えるようになる(引数の文字列がパスワードと一致するとUserオブジェクトを返し、一致しない場合はfalseを返すメソッド)。

具体的な方法

まずはモデル内にpassword_digestを含ませる必要がある。
以下のコマンドを実施。

$ rails generate migration add_password_digest_to_users password_digest:string

からのdb:migrateを実行。

$ rails db:migrate

has_secure_passwordを使ってハッシュ化するためには、bcryptライブラリを使う。
gemfileに追加する。

gem "bcrypt"

bundle installは忘れずに。

$ bundle install

ここまできたらついにmodelにhas_secure_passwordを追加する。

class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: true
  has_secure_password
end

ここで何らかのテストが失敗している可能性があります。
has_secure_passwordには、仮想的なpassword属性とpassword_confirmation属性に対してバリデーションをする機能も(強制的に)追加されているので、もしsetupなどを用いて@user変数を定義している場合は、passwordとpassword_confirmationも追加してあげましょう。

def setup
  @user = User.new(name: "Example User", email: "user@example.com",
                 password: "foobar", password_confirmation: "foobar")
end

また、パスワードはセキュリティの観点から最低6文字以上に設定することをおすすめします。
こちらも簡単で、モデル内にvalidateをかけるだけです。

class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: true
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }
end

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?