1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】has_secure_passwordでパスワードのセキュリティを強化

Posted at

##目的
パスワードのセキュリティを強化する。

##手段
has_secure_passwordを使ってパスワードをハッシュ化する。

・ハッシュ化は、訳のわからない暗号みたいな文字列に変換すること。

・has_secure_passwordでハッシュ化されたパスワードは、同じ文字列で生成すれば常に同じ値になるので一致しているかどうかをチェックする際に使える。

・has_secure_passwordでハッシュ化したパスワードは、元のパスワードそのものに戻すことができないので、ハッシュ化されたパスワードを奪われたとしても何の問題もないのでパスワードのセキュリティが強固になる。

##手順
####1.Userモデル作成時のパスワード属性をpassword_digestとする。
 ➡︎has_secure_passwordを使う際の命名規則なので必須。

####2.Gemfileにbcryptというgemを追加して、インストールする。
 ➡︎bcryptというgemをインストールすることで、has_secure_passwordを使えるようになりパスワードをハッシュ化できるようになる。
 ➡︎$ bundle installコマンドを忘れずに。

####3.Userモデルにhas_secure_passwordを記述。
 ➡︎Userモデル内にhas_secure_passwordを記述したことにより、password属性とpassword_confirmation属性の2つの属性が追加される。データベースのカラムとは対応していない属性。

 ➡︎どういうことかというと、この2つはユーザーに入力を求めるためだけの属性で、この2つの属性をユーザーに入力させることで、Railsはこの2つの一致をチェックした後、一致していたらそのパスワードをハッシュ化してデータベースのpassword_digest属性に格納されるようになっている。

以上の記述を行うことで、ユーザーの新規登録時に入力したパスワードはハッシュ化されるようになる。

ターミナル

$ rails g model user ... ... password_digest:string


>```ruby:db/migrate/[timestamps]_create_users.rb
  class CreateUsers < ActiveRecord::Migration[5.2]
    def change
      create_table :users do |t|
        .
        .
        .
        t.string :password_digest
        .
        .
        .
      end
    end
  end
ターミナル 

$ rails db:migrate


>```ruby:Gemfile
  gem 'bcrypt', '~> 3.1.7'
ターミナル

$ bundle install


>```ruby:app/models/user.rb
  class User < ApplicationRecord
    has_secure_password
    .
    .
    .
  end

試しにコンソールで確認してみる。

$ rails c --sandbox
> user = User.new(..., password: '123456', password_confirmation: '123456')
> user.save
=> true
 
>user.password_digest
=> 'fflafbnalwefhhhawkleufhb'


ユーザーにpasswordとpassword_confirmationに任意の値を入力させれば、2つの属性が一致しているかどうかを検証した後に、ちゃんとハッシュ化されたパスワードがpassword_digest属性に保存されている事がわかる

##参考
 [現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E7%8F%BE%E5%A0%B4Rails&qid=1586706956&sr=8-2)
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?