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

Rails:gem 'devise' の使い方

Last updated at Posted at 2020-08-14


gem 'devise' の使い方を復習していく。

'devise'のgemはrailsでログイン機能を簡単に実装するためのgem。

Gemfileを以下の様に編集

Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

# 省略

gem 'devise'      #最終行に追記。


$ pwd ディレクトリを確認する。
$ bundle install Gemfileに追記したdeviseをインストール。
*ログに(Installing devise 4.7.0)みたいなのが出ていればインストールできている。

ローカルサーバーの再起動

control + C で一度サーバー終了
$rails s で再度サーバー起動

deviseの設定ファイル作成

deviseの使用するためには、Gemのインストールと専用コマンドを使用して
設定ファイルを作成する必要がある。

$rails g devise:install 設定ファイルの作成

新規作成されるファイル
• config/initializers/devise.rb
• config/locales/devise.en.yml

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

モデルの作成には通常のコマンドではなく、deviseのモデルを作成する
専用のコマンドを使用してモデルを作成する。

$ rails g devise user userモデルを作成する。

新規作成されるファイル
• app/models/user.rb
• test/fixtures/users.vml
• test/models/user_test.rb
• db/migrate/20XXXXXXXXXXXX___devise_create___users.rb

config/routes.rbに下記の様な記述が自動的に追記される。

config/routes.rb
Rails.application.routes.draw do
  devise_for :users   #この部分が追記される
# 省略

$ rails db:migrate usersテーブルの作成。

Viewの作成

deviseでログイン機能を実装するとuser_signed_in? メソッドが使用できる。
ユーザーがサインインしている時はtrueを返して、サインインしていない時はfalseを返す。
user_signed_in? メソッドを使用して、ログイン・新規登録・ログアウトボタンを作成していく。

sample.html.erb
<% if user_signed_in? %>
  # ログインしている時の処理
<% else %>
  # ログインしていない時の処理
<% end %>

下記の様にボタンを適当なviewに追記。

sample.html.erb
<div class="header">
  <% if user_signed_in? %>
    <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "header__btn" %>
  <% else %>
    <%= link_to "ログイン", new_user_session_path, class: "header__btn" %>
    <%= link_to "新規登録", new_user_registration_path, class: "header__btn" %>
  <% end %>
</div>

次にdevise用のviewを作成する。

$ rails g devise:views 専用コマンドでログイン画面・新規登録画面が作成される。

新規作成されるファイル
• app/views/devise以下のディレクトリにある各種ビューファイル。

新規登録画面: app/views/divise/registrations/new.html.erb

ログイン画面: app/views/devise/sessions/new.html.erb

再度ローカルサーバーを再起動して動作確認して終了。


configure_permitted_parameters メソッド

deviseはデフォルトで、メールアドレス・パスワードしか受け取れない様にストロングパラメーターが設定されている。
configure_permitted_parameters メソッドを設定して、追加のパラメーターを許可しなければならない。

つまり、初期状態だと新規登録画面でメールアドレスとパスワードしか登録できない。
ニックネームやその他の情報を登録したかったら設定をいじる必要がある。

ニックネームを登録できる様にする

まずはusers テーブルにnicknameカラムを追加する。

$ rails g migration AddNicknameToUsers nickname:string
$ rails db:migrate

新規登録画面で nickname を登録できる様にする。

app/views/devise/registrations/new.html.erb
<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render "devise/shared/error_messages", resource: resource %>

# 以下を追記
  <div class="field">
    <%= f.label :nickname %><br />
    <%= f.text_field :nickname, autofocus: true %>
  </div>

# 省略

configure_permitted_parameters メソッドの設定

app/controllers/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

動作確認して終了。

1
1
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?