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

【忘備録】Ruby on rails : パスワード登録

Last updated at Posted at 2020-03-20

前提

今回はユーザーの新規登録する場面を想定しています。
以下がユーザーを登録する為のusersテーブルです。
password_digest カラムが新規登録する際に設定するパスワードを格納しています。

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name            | varchar(255) | YES  |     | NULL    |                |
| email           | varchar(255) | YES  |     | NULL    |                |
| created_at      | datetime     | NO   |     | NULL    |                |
| updated_at      | datetime     | NO   |     | NULL    |                |
| password_digest | varchar(255) | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

本題

railsではパスワードを設定する際に便利な機能が既に用意されています。
以下はusersテーブルを操作する為のモデルクラスです。
validates 群の下に has_secure_password とありますがこれはrailsに備わっている
メソッドです。
このメソッドをモデルクラスに追加することで今回の場合、usersテーブルのpassword_digest カラムに
暗号化されたパスワードを保存することが可能になります。(password_digest カラムは自分で作る必要があります。)厳密にはこの他にbcryptというgemが必要になるのでインストールしましょう。
インストールが済んだら正式に完了です。

class User < ApplicationRecord
  validates :name, presence: true, length: { maximum: 50 }
  validates :email, presence: true, format: { with: /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i }
  validates :password, presence: true, length: { minimum: 6, maximum: 25 }, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,}+\z/i }

  has_secure_password
end

あとはこのメソッドを使用すると自動的に通常のパスワードと確認用のパスワードが一致しているかの確認を行ってくれます。フロント側に普通のパスワード用のフォームと確認用パスワード用のフォームを用意してsubmitすれば自動的に確認してくれます。

一応下記がそのフォームです。

        <%= form_for @user do |f| %>
          <div>
            <%= f.label :name %>
            <%= f.text_field :name %>
          </div>
          <div>
            <%= f.label :email %>
            <%= f.text_field :email %>
          </div>
          <div>
            <%= f.label :password %>
            <%= f.password_field :password %>
          </div>
          <div>
            <%= f.label :password_confirmation %>
            <%= f.password_field :password_confirmation%>
          </div>

        <%= f.submit "登録", class: "btn-block btn-white" %>
        <% end %>
        <%= link_to "ログイン", "#", class: "text-white" %>
      </div>
    </div>
  </div>
</div>

これがパスワードフォームで
<%= f.password_field :password %>

これがパスワード確認用のフォームです。
<%= f.password_field :password_confirmation%>

:passwordpassword_confirmationがparamsのハッシュのkeyとなって送信され、
keyのvalueが一致しているかモデルクラスで確認されますので名前は変えない方がいいと思います。

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