はじめに##
deviseを用いてユーザ登録の実装について書かせて頂きます。
自分でもまだまだ理解不十分な所もあるのでアウトプットできればと思います。
ログイン機能の実装##
TwitterやInstagram、メルカリなど多くのウェブサイトにはログイン機能があります。
ユーザに対してアカウントを作り、ユーザを管理する機能です。
それではまずdeviseのインストールから始めます。
deviseのインストール##
ログイン機能を実装するにはまずdeviseというgemをインストールします。
deviseとはユーザー管理機能を簡単に実装するためのgemの事です。
gemってなんぞや?となるかもしれませんが、今回は割愛させて頂きます。🙇♂️
それではインストールします。
GemfileはRailsアプリで利用するgemの一覧を管理するファイルです。
様々な記述がされているのでまずは一番最後の行に記述しましょう。
gem 'devise'
この時シングルクォーテーション忘れずに記述します。
記述し終えたらターミナルでコマンドを実行します。
bundle install
これでインストールし終えました。
一旦サーバーを起動させます。理由はインストールしたGemの反映するタイミングが、サーバー起動時だからです。
rails s
インストールできたかはGemfile.lockで確認できます。
(gemfileのレシートようなものと考えております。)
devise設定ファイルを作成##
下記のコマンドを実行しましょう。
これは「設定関連に使用するファイル」を自動で生成するコマンドです。
rails g devise:install
deviseのUserモデルを作成##
deviseを利用する際には、アカウントを作成するためのUserモデルを新しく作成する必要があります。
作成には通常のモデルの作成方法ではなく、deviseのモデル作成用コマンドでUserモデルを作成します。
アカウントを作成するためのUserモデルを作ります。この中にはアカウント名やemail、passwordなどのデータが入ります。
deviseモデルの作成は通常とはやり方ではありません。
# 通常のモデル作成の場合(モデル名をuserとする)
rails g model user
# deviseのuserモデル作成の場合
rails d devise user
このコマンドでユーザーに関する、モデルやマイグレーション、ルーティングも自動生成されています。
Rails.application.routes.draw do
devise_for :users #この行が追加されました
root to: 'items#index'
end
テーブルの作成##
すでに自動生成されているマイグレーションファイルに内容を記述し、テーブルを作成します。
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
##省略
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
このような感じでマイグレーションファイルがあるかと思います。
5,6行目に注目してください。
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :nickname, null: false #ニックネームを追加しました
t.date :birth_day, null: false #誕生日を追加しました
デフォルトでメールアドレスとパスワードはあります。
他に名前や誕生日などを追加していく事も可能です。
テーブルが設計できたのでマイグレーションを実行します。
rails g migrate
| id | encrypted_password | nickname | birth_day | |
|---|---|---|---|---|
このようなdbが完成しました。