LoginSignup
2
0

More than 1 year has passed since last update.

Rails Gem パスワードを暗号化するbcyptの使い方

Last updated at Posted at 2021-05-06

bcyptとは

パスワードを暗号化してセキュリティを向上させるためのGemです。

bcyptのインストール

Ruby on RailsのGemfileの中にコメント付きで既に記述されていので
そのコメントアウトを外してbundle installすることでインストールすることができます。

Image from Gyazo

Image from Gyazo

% bundle install

bycypt

bycyptでは主に2つのメソッドを使うことができるようになります。

  • has_secure_passwordメソッド
  • authenticateメソッド

・has_secure_password

モデル内に1行書くことにより、passwordpassword_confirmationという属性を使うことができます。

maigationファイルにカラムを追加する場合はpassword,password_confirmationではなく

20210416072618_add_password_to_users.rb
class AddDetailsToTitles < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string

  end
end

とする必要があるので注意です。

passwordを格納するデータベースのテーブルにはpassword_digestというカラムを作成しておくと、
passwordpassword_confirmationで入力したパスワードが一致していれば
password_digestカラムに暗号化してパスワードを格納することができるようになります。

viewファイルにpasswordpassword_confirmationをフォームで送るだけでbcyptが暗号化してくれます。

_form.erb

<%= form_with model: @user do |f| %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation %>

<% end %>

・authenticateメソッド

authenticateメソッドはパスワードを認証するためのメソッドで正しいパスワードを入力するとtrueを返し、間違ったパスワードを入力するとfalseを返します。

パスワードのバリデーションは標準で装備されています。

アプリを作って試してみる

% rails new password_app
% cd password_app
% rails db:create
Gemfile
# gem 'bcrypt', '~> 3.1.7'

を外して

% bundle install

Userモデルを作成してpassword_digestカラムを作成します。

% rails g model user password_digest:string

作成できたら

% rails db:migrate

userモデルにhas_secure_passwordを書きます。

models/user.rb
class User < ApplicationRecord
  has_secure_password
end

rails consoleで動作確認します。

$ rails c

Image from Gyazo

間違ったパスワードを入れるとfalseが返ってきて
正しいパスワードを入れると情報が返ってきています。

irb(main):001:0> u = User.new
   (1.3ms)  SELECT sqlite_version(*)
=> #<User id: nil, password_digest: nil, created_at: nil, updated_at: nil>
irb(main):002:0> u.password = "1234"
=> "1234"
irb(main):003:0> u.save
   (0.2ms)  begin transaction
  User Create (3.6ms)  INSERT INTO "users" ("password_digest", "created_at", "updated_at") VALUES (?, ?, ?)  [["password_digest", "$2a$12$PaXO7LLKIqWGIXFhpkZcgOPSv2H.Mrmol6XwvI0aYMxrYdCFlmQCS"], ["created_at", "2021-05-06 13:04:13.549990"], ["updated_at", "2021-05-06 13:04:13.549990"]]
   (1.6ms)  commit transaction
=> true
irb(main):004:0> u.authenticate("3333")
=> false
irb(main):005:0> u.authenticate("1234")
=> #<User id: 4, password_digest: [FILTERED], created_at: "2021-05-06 13:04:13", updated_at: "2021-05-06 13:04:13">

以上です。

参考サイト
Qiita Railsにおけるパスワードの扱い方(BCrypt)
FREE SWORDER Railsアプリのパスワードを暗号化する方法〜bcryptの使い方〜
Rails Tutorial

2
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
2
0