LoginSignup
0
1

More than 3 years have passed since last update.

ユーザー管理機能をDeviseを使って実装する方法(Rails)

Posted at

RailsにDeviseを導入する方法(学習記録):statue_of_liberty:

1: Gemのインストール

まずdeviseというGemをインストールします

# Gemfile
# 追記
gem 'devise

# Gemのインストール
% bundle install

2: rails g devise:installコマンドの実装

# deviseの設定ファイルを作成
% rails g devise:install

3: rails g deviseコマンドでdeviseに管理させたいモデルを生成

# deviseコマンドでUserモデルを作成
% rails g devise user

# マイグレーションファイルも自動生成される

4: マイグレーションの実行

# マイグレーションを実行
% rails db:migrate

5: deviseのビューを作成

※ deviseでログイン機能を実装すると、ログイン/サインアップ画面が自動的に生成されますがビューファイルとしては生成されません。これは、deviseのGem内に存在するビューファイルを読み込んでいるためです。deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要があります。

% rails g devise:views

# 生成されたビューファイルを独自に編集

5: カラムの追加

※ 現在、サインアップ時に登録する情報はメールアドレスとパスワードの2つです。これに加えて名前を登録できるようにしましょう。
テーブルにカラムを追加するために、マイグレーションを生成する必要があります。

1.rails g migrationコマンド

マイグレーションを生成するコマンドです。
マイグレーションはこれまで、rails g modelコマンドでモデルと一緒に生成されていましたが、すでに作成されたテーブルの内容を変更する際などに使用します。

2.usersテーブルにnameカラムをstring型で追加
# usersテーブルにnicknameカラムをstring型で追加するマイグレーションファイルを作成
% rails g migration AddNameToUsers name:string

# 作成したマイグレーションを実行
% rails db:migrate
3.ストロングパラメーターを使えるようにする

※ サインアップ時に入力する情報はパラメーターとしてサーバーに送信されます。deviseを使わない通常のリクエストの場合は、コントローラーにストロングパラメーターを記述し、受け取れるパラメーターを制限していました。deviseに関しても、同様にストロングパラメーターをコントローラーに記述します。しかし、deviseの処理を行うコントローラーはGem内に記述されているため、編集することができません。

4.devise_parameter_sanitizerメソッド

deviseにおけるparamsのようなメソッドです。deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できます

# application_controller.rbを編集
# sign_up(新規登録の処理)に対して

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

以上がユーザー管理機能をDeviseを使って実装する方法です!参考までにどうぞ!!

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