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