最近、初の個人開発のWebサービスをリリースしました。
実際のユーザーからどう見えているのか、改修をしたけど果たしてちゃんとログインできるのか?
確認のため、別のユーザーでログインする機能を実装してみました。
認証のライブラリはdeviseです。
実装にあたってdevise_masquerade Gemの利用を検討しました。
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で別のユーザーでログインする場合の参考にしてください。
コメントを残す