LoginSignup
1
1

More than 3 years have passed since last update.

deviseを使ったユーザー登録

Posted at

今回はdeviseを使ったユーザー登録の流れを!
忘れないように自分用です。

deviseとは

 ユーザー管理機能を簡単い実相するためのgem。

Gemfileに追記する

gem 'deviseを最終行に追記。
その後、プロジェクトディレクトリで
bundle install

deviseの設定ファイルを作成。

ターミナル
$ rails g devise:install
・config/initializers/devise.rb
・config/locales/devise.en.yml
上記のファイルが作成される。

deviseの機能を持ったUserモデルを作成。

deviseを利用する際にはアカウントを作成するためのUserモデルを新しく作成します。通常のモデルの作成方法ではなく、devisdeのモデル作成用コマンドで作成。
①userモデルの作sでい
ターミナル
$ rails g devise user
・app/models/user.rb
・db/migrate/20XXXXXXXXXXXX_devise_create_users.rb
・test/fixtures/users.yml
・test/models/user_test.rb
上記ファイルが自動で作成され、config/routes.rbに以下の記述がされる。
Rails.application.routes.draw do
devise_for :users

この記述により、ログイン・新規登録に必要なルーティングが生成されます。

②userテーブルの作成
ターミナル
$ rails db:migrate
userテーブルが作成されているのを確認できればOK!

新規登録/ログインの実装

手順は以下の通り、
1.未ログイン時のボタン設定
2.未ログイン時・ログイン時でボタン表示の変更
3.devise用のビューを作成する

1.未ログイン時のボタン設定については、ビューの装飾を変更するだけなので割愛。

2.未ログイン時・ログイン時でボタン表示の変更

こちらを変更できようにするのが、user_signed_in?メソッド

user_signed_in?メソッドとは

deviseでログイン機能を実相する際に使用できるメソッドで、ユーザーがサインインしているかどうかを検証するためのメソッドです。
サインインしている場合はtrueで返し、サインインしていない場合は、falseで返します。
<% if user_signed_in? %>
<%= link_to "新規投稿", [prefix], class: "" %>
<%= link_to "ログアウト", [prefix], method: :delete, class: "" %>
<% end %>

user_signed_in?が返す値は最終的に、trueかfalseになるおで、上記の例のようにif文またはunless文とともに使用します。

devise用のビューを作成

deviseのコマンドを利用してビィーファイルを生成すると、簡単い新規登録画面とログイン画面が作成できます。
ターミナル
$ rails g devise:views
新規登録画面:app/views/devise/registrations/new.html.erb
ログイン画面:app/views/devise/sessions/new.html.erb
というビューファイルが対応。

ユーザー名も登録できるようにする。

deviseの初期状態では、nicknameカラムは作成されないため、もし必要であれば以下のコマンドでuserテーブルにnicknameカラムを作成する。
# usersテーブルにnicknameカラムをstring型で追加するマイグレーションファイルを作成
$ rails g migration AddNicknameToUsers nickname:string

# マイグレーションファイルの実行
$ rails db:migrate

configure_permitted_parametersメソッド

deviseの初期状態でサインアップ時にメールアドレスとパスワードのみ受け取るようにストロングパラメーターが設定してあるので、上記で追加したキー(nickname)のパラメーターは許可されていない。
追加のパラメーターを許可したい場合は、application.controller.rbにおいて以下の記述をする。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?

protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end

current_userメソッド

current_userメソッドは、deviseのヘルパーメソッドで、ログイン中のユーザー情報を取得できる。
idを取得したい場合、current_user.id記述

1
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
1
1