Deviseで別のユーザーでログインする機能を実装する

f:id:ihatov08:20171003121303j:plain

最近、初の個人開発のWebサービスをリリースしました。

実際のユーザーからどう見えているのか、改修をしたけど果たしてちゃんとログインできるのか?

確認のため、別のユーザーでログインする機能を実装してみました。

認証のライブラリはdeviseです。

実装にあたってdevise_masquerade Gemの利用を検討しました。

github.com

devise同様、Rails engineで構築されているのですが、どのモデルにも対応するように、汎用的に作られている反面、

カスタマイズする場合コードを読まないといけないことと、汎用性は必要なかったので、実装してみました。

Routing

namespace :users do
post "masquerades/:user_id" => "masquerades#create", as: :masquerades
end

Controller

class Users::MasqueradesController < ApplicationController
# admin_userでログインしている場合のみ使用可能にする
before_action :authenticate_admin_user!
def create
user = User.find(params[:user_id])
# deviseのsign_inメソッドでサインインする
sign_in(user)
# リダイレクト先の指定
redirect_to dashboards_path
end
end

View

link_to "ユーザーでログイン", users_masquerades_path(resource), method: :post

Gemよりもクリーンなコード

ライブラリを使うとREADMEの通りにすれば実装できる反面、カスタマイズするためにコードを読まないといけなかったりするので、
ライブラリのコードをさらっと見てみて参考にしながら自分で実装してみるのもよいと思います。

Gemの作りは今回の仕様にはオーバースペックだったため、採用を見送りました。

Deviseで別のユーザーでログインする場合の参考にしてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です