Rails
devise

Deviseで、別ユーザとしてログインする

概要

RailsとDeviseを使用し、管理ユーザなどで一度ログインした後に、別ユーザとしてログインする

Devise Masqueradeを使用する

https://github.com/oivoodoo/devise_masquerade
https://gorails.com/episodes/devise-masquerade

手順

Gemfileに設定を追加

Gemfile
gem 'devise_masquerade', '~> 0.6.1'

Modelに設定を追加

user.rb
devise :masqueradable

application_controller.rbに設定を追加

application_controller.rb
before_action :masquerade_user!

routes.rbに設定を追加

routes.rb
devise_for :users, controllers: { masquerades: "user/masquerades" }

user/masquerades_controller.rbを追加

user/masquerades_controller.rb
class User::MasqueradesController < Devise::MasqueradesController
  protected

  def after_masquerade_path_for(resource)
    root_path
  end
end

設定ファイルを追加

config/initializers/devise_masquerade.rb
Devise.masquerade_param = 'masquerade'
Devise.masquerade_expires_in = 10.seconds
Devise.masquerade_key_size = 16 # size of the generate by SecureRandom.urlsafe_base64
Devise.masquerade_bypass_warden_callback = false
Devise.masquerade_routes_back = false # if true, route back to the page the user was on via redirect_back

Devise.masqueraded_resource_name = :user
Devise.masquerading_resource_name = :admin_user
Devise.masqueraded_resource_class = User
Devise.masquerading_resource_class = AdminUser

viewに以下のようなリンクを追加する

ログイン
<%= link_to 'このユーザでログイン', masquerade_path(user) %>

戻る
<% if user_masquerade? %>
  <%= link_to '戻る', back_masquerade_path(current_user) %>
<% end %>