これは少し難しいことです。 def timeout_in Deviseメソッドをオーバーライドすることで、ユーザーモデルのtimeout_inを動的に設定できます。それは直接あなたの質問に答えていませんが
# You could add a boolean onto the user if testing and set it to true once signed in with a testing user.
# You can then somehow set it to false once the user signs out after testing a user.
def timeout_in
if self.testing?
5.minutes
else
30.minutes
end
end
この問題の別の回避策は、以前の管理者に彼/彼女がテストで行われるたびに彼の前のアカウントに辞任する機能を許可するようになります。別のユーザーになるときに、セッション[:admin_logged_in]を前のユーザーのIDと設定できます。セッション[:admin_logged_in]が存在する場合は、ユーザーを再び管理者にしてテストユーザーにサインアウトするルートを作成できます。ユーザーが管理ユーザーになった後、セッション[:admin_logged_in]をクリアするだけで済みます。
def become_other_user
session[:admin_logged_in] = current_user.id
sign_out current_user
user = User.find(params[:id])
sign_in(:user, user, { :bypass => true })
redirect_to something_path
end
def become_admin_user
if session[:admin_logged_in].present?
if current_user
admin_user = User.find_by_id(session[:admin_logged_in])
sign_out current_user
sign_in(:user, admin_user, { :bypass => true })
session[:admin_logged_in].clear
flash.clear if flash.present?
end
end
end
# erb nav file
<% if session[:admin_logged_in].present? %>
<%= link_to 'Switch To Admin', become_admin_user_path, class: '#' %>
<% end %>
Davidさん、私は興味がありましたbtwオーバーライドできるデバイスメソッドはありませんか?デベロッパはセッションが存在するかどうかをチェックしますか? – user1735921