地方でリモートワーク

プログラミング、先物、fx,仮想通貨なんでもやります

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で別のユーザーでログインする場合の参考にしてください。