質問: Railsで`Devise`を使ったユーザー認証を実装しています。 特定のユーザーが他のテスト用のユーザーでは再現しないエラーを抱えているという報告があったのですが、この場合そのユーザーでログインした場合の画面情報を確認するにはどのような方法ありますか? 自分のやり方ですとローカルにDBをコピーして、パスワードがわかってるユーザーの`encrypted_password`を該当ユーザーの`encrypted_password`に入れる、というものですがもうちょっとスマートな方法はないでしょうか?
回答: Adminのbecome機能 管理画面に`become機能`を実装するのはどうでしょうか。 `Devise`のWikiのHow Toを集めたページ How Tos · plataformatec/devise Wiki の中に 「もしアドミンユーザなら他のユーザになる方法」 How To: Sign in as another user if you are an admin · plataformatec/devise Wiki が記載されています。 一度実装してしまえば、該当ユーザの(成り代わったユーザの)画面情報にとどまらず画面からの操作が可能です。 実装完了してしまえば、直接DB操作することなく全てWebブラウザの画面で完結することができます。 もし本番で不用意に他のユーザに変わりたくないというのであれば、ローカルだけ(development環境だけ)この機能が使えるようにしておくなど方法があると思います。 一部引用かつ翻訳 「もしアドミンユーザなら他のユーザになる方法」 How To: Sign in as another user if you are an admin · plataformatec/devise Wiki ``` class AdminController < ApplicationController before_filter :authenticate_user! def become return unless current_user.is_an_admin? sign_in(:user, User.find(params[:id])) redirect_to root_url # or user_root_url end end ``` もし、`last_sign_in_at`と`current_sign_in`を該当ユーザに成り代わったときに更新したくなければ、`sign_in(:user, User.find(params[:id]))`の部分を`sign_in(:user, User.find(params[:id]), { :bypass => true })`に変更できる。 この後 `:bypass`オプションの詳しい説明が、 > > The :bypass option bypasses warden callbacks and stores the user straight in the session. > > > と続きますが、いまいち意味がわからず..... また、flyerhzm/switch_userというのもあると参考までに紹介されています。