2
2

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.

deviseでログイン機能を追加する

Last updated at Posted at 2021-10-18

Ruby On Railsでdeviseを扱う

deviseの導入

Gemfile
gem 'devise'
ターミナル
bundle install
rails g devise:install

ファイルを作成

ターミナル
# model
rails g devise user
rails db:migrate
# controller
rails g devise:controllers users
# views
rails g devise:views users

複数のログイン機能を作成する場合

必要な分だけファイルを用意する

ターミナル
# user用
rails g devise user
rails db:migrate
rails g devise:controllers users
rails g devise:views users

# staff用
rails g devise staff
rails db:migrate
rails g devise:controllers staffs
rails g devise:views staffs

設定ファイルを変更する

config/initializers/devise.rb
 # config.scoped_views = false
 # ↑コメントアウトを外してtrueにする
 config.scoped_views = true

ファイルについて

app/views/users/sessions/new.html.erb:       ログイン画面
app/views/users/registrations/new.html.erb:  新規登録画面

seedで管理者管理者を作成する

ターミナル
rails g devise adimn
rails db:migrate
rails g devise:controllers admin
rails g devise:views admin
db/seeds.rb
Admin.find_or_create_by(id: 1) do |admin|
  admin.email = "example@example.com"
  admin.password = "foobar"
end
ターミナル
rails db:seeds

ログアウトする

erb
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "ログアウト", destroy_medicalstaff_session_path, method: :delete %>

:authenticate_user!

deviseで使える便利なメソッド
ユーザがログインしているかどうかを確認し、ログインしていない場合はユーザをログインページにリダイレクトする。

controller.rb
class UsersController < ApplicationController
  # befor_actionと一緒に使う
  before_action :authenticate_user!

  def index
    @user = User.find(current_user.id)
    favorites = Favorite.where(user_id: current_user.id).pluck(:institution_id)
    @favorites_list = Institution.find(favorites)
  end

  def edit
    @user = User.find(current_user.id)
  end

  def update
    @user = User.find(current_user.id)
    if @user.update(user_params)
      redirect_to edit_user_path(current_user), notice: "プロフィール情報を更新しました"
    else
      render "edit"
    end
  end

  private
  def user_params
    params.require(:user).permit(:name, :image)
  end
end

日本語化

devise.ja.ymlを使う

devise.ja.ymlをconfig/localesに設置します。devise.ja.ymlはいくつか見本があるようです。

local/appricarion.rbconfig.i18n.default_locale = :jaを記述して、日本語設定をする。

config/application.rb
module Sample  #module名はわかりやすいものを
  class Application < Rails::Application
    config.i18n.default_locale = :ja
  end
end

gemを導入する

Gemfile
gem 'rails-i18n'
ターミナル
bundle install

参考資料

heartcombo/devise
【Rails】deviseを導入してみる
[Rails] deviseの使い方(rails6版)
Rails deviseで使えるようになるヘルパーメソッド一覧
【Rails】deviseのビューのform_forをform_withに置き換える

複数のログイン機能を作成する場合

Railsのdeviseを使って複数のユーザー別でログインする方法
deviceを使用して、adminモデルを追加する流れを分かりやすく解説

:authenticate_user!

【rails】authenticate_user!の使い方

日本語化

【Rails基礎】deviseを用いたフラッシュメッセージを表示する方法を簡単に解説
【Rails】deviseを利用したflashメッセージの表示方法

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?