Railsでdeviseの使い方まとめ


gemfileにdevisegemのインストール

gem 'devise'


deviseをインストール

$ rails g devise:install


deviseをを使うモデルの作成

$ rails g devise User


データベースのマイグレート

$ rails db:migrate


認証の追加

before_action :authenticate_user!



ビューのカスタマイズ

$ rails g devise:views users


viewが反映されないとき
'config_initializers/devise.rb'

config.scoped_views = true


コメントを外しtrueに変更すると解決します!


ログインしている場合ページを表示ししていなければログイン画面に設定する

class HomeController < ApplicationController
 def index
  if user_signed_in?
   render 'home'
  else
   redirect_to new_user_session_path
  end
 end
end



db:seedにadminユーザー登録
'db/seed.rb'

User.create!(email: 'kaz@example.com', password: 'password', password_confirmation: 'password')


$ rails db:seed


ログイン状況の確認の仕方


ユーザーがログインしているか確認
user_signed_in?

現在ログインしているユーザーのオブジェクトを取得
current_user


ログアウトリンクの設定

<%= link_to 'Logout', destroy_user_session_path, method: :delete %>

viewにこのリンクを貼るだけでOK

Userに特定の権限を持たせる


Userにロールを追加

$ rails generate migration AddRoleToUsers role:string
$ rails db:migrate


Userモデルの設定

class User < ApplicationRecord
 # ...

 def editor?
  role == 'editor'
 end
end


コントローラーにアクセス制御を許可

class ArticlesController < ApplicationController
 before_action :authenticate_user!
 before_action :check_editor, only: [:edit, :update]

 # ...

 private

 def check_editor
  unless current_user&.editor?
   flash[:alert] = 'You do not have permission to edit this content.'
   redirect_to root_path
  end
 end
end



ビューのカスタマイズ

<% if current_user&.editor? %>
 <%= link_to 'Edit', edit_article_path(@article) %>
<% end %>