#Deviseをインストール
何と言ってもまずは、このgemをinstallするところから全ては始まります。
% gem'devise'
% bundle install
% rails g devise:install
これでdeviseのインストールが完了です。
##devise関連のファイル
###modelを生成
rails g devise user
ユーザーモデルとマイグレーションファイルが生成されます。
またこのコマンドを実行するとconfig/routes.rb
に自動でdeviseのルーティングが設定されます。
Rails.application.routes.draw do
devise_for :users
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
####viewを生成
rails g devise:views
このコマンドを実行すると自動的に必要な機能のビューファイルをあっという間に生成してくれます。
#各ファイルの編集
###マイグレーションファイル
今回は新規登録画面において以下の情報をテーブルに送ります。
lass DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :last_name, null: false
t.string :first_name, null: false
t.string :kana_last, null: false
t.string :kana_first, null: false
t.date :birthday, null: false
... (省略)
これで事前にテーブル設計しておいた情報を記述したので後はmigrateしてusersテーブルの完成です。
% rails db:migrate
#エラーとバリデーションの設定
app/views/devise/registrations/new.html.erb
ファイルに記載したフォームでサーバーにリクエストを送りテーブルに保存されるが、正しく情報が保存される為にバリデーションとエラーメッセージの設定を行います。
-
users.rb
に以下を記述
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true
validates :email, presence: true
#変数VALID_PASSWORD_REGEXに6文字以上の半角英数字混同させるオプションを代入する
VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])[a-z\d]{6,}+\z/
validates :password, presence: true, length: { minimum: 6 }, format: { with: VALID_PASSWORD_REGEX}
#ヘルパーに全角ひらがな、カタカナ、漢字で入力させるオプションを記述
validates :last_name, :first_name, presence: true, format: { with: /\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+\z/ }
#全角カタカナで入力させるオプションを記述
validates :kana_last, :kana_first, presence: true, format: { with: /\A[\p{katakana}ー-&&[^ -~。-゚]]+\z/ }
validates :birthday, presence: true
end
これで新規登録の際にユーザーの個人情報を上記の形で保存させることができる。
-
application.controller.rb
に以下を記述
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configre_permitted_parameters, if: :devise_controller?
def configre_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :last_name, :first_name, :kana_last, :kana_first, :birthday])
end
end
deviseに関するコントローラーの処理の時だけ作動するconfigure_permitted_parametersメソッドで、
keys:以降の値が入力されていないと、保存できない処理にすることができる
※ちなみにdeviseは、emailとpasswordをデフォルトで受け取ることができます!
#ログイン・アウトの実装
ここまでくれば後は、ログイン・アウト機能を実装するだけです。
・headerファイルを編集
#user_signed_in?でログインの有無で表示が変わるように設定します
<% if user_signed_in? %>
<li><%= link_to "#{current_user.name}", class: "user-nickname" %></li>
<li><%= link_to 'ログアウト', destroy_user_session_path , method: :delete, class: "logout"%> </li>
<% else %>
<li><%= link_to 'ログイン', new_user_session_path, class: "login" %></li>
<li><%= link_to '新規登録', new_user_registration_path, class: "sign-up" %></li>
<% end %>
link_to "#{current_user.name}"
で、ログインしているユーザーの名前をDBのカラムから取得することができます。
これでlocalhost:3000/users/sign_in
もしくは、users/sign_up
に接続すればログイン、新規登録ができます。
もちろんこれらはdevieに関するファイル編集になるので、ご自分でコントローラーを用意し、トップページからこれらの機能が使えるかどうか、試してみてください。
もしエラーになったら、一度サーバーの接続を断って接続し直せばつながると思うのでやってみてください。
初心者として初めての公開になりますので、もし理解が間違っていたりもっとこうしたら良いよというのがありましたら、いつでもお待ちしておりますので宜しくお願いします。