我有应用程序,并连接了活动管理员。我试图让管理员用户通过活动管理员以任何用户身份登录,而无需使用 devises 的sign_in @user
方法输入密码。是否可以开箱即用地实现这一目标?
我可以在参数/会话中使用用户名进行重定向,但这并不安全,就好像我不想在活动管理员之外传递任何东西一样。
有任何想法吗?
我有应用程序,并连接了活动管理员。我试图让管理员用户通过活动管理员以任何用户身份登录,而无需使用 devises 的sign_in @user
方法输入密码。是否可以开箱即用地实现这一目标?
我可以在参数/会话中使用用户名进行重定向,但这并不安全,就好像我不想在活动管理员之外传递任何东西一样。
有任何想法吗?
您可以通过使用其他方法首先对管理员进行身份验证来做到这一点,
def authenticate_any!
if authenticate_admin_user!
true
else
authenticate_user!
end
end
或压倒一切的设计
module Devise
module Controllers
module Helpers
def authenticate_user!
if authenticate_admin_user!
return true
end
super
end
end
end
end
我不确定您所说的“不安全”到底是什么意思;设计内部可以确保您是管理员用户等,您需要传递的只是新用户的用户名。也就是说,下面的代码完全在 ActiveAdmin 中,可以实现您想要的。
注意我想不出一种简单的方法来重新登录管理员用户(我对所有用户使用相同的设计并使用基于角色的身份验证)。
member_action :sign_in_as, :method => :put do
user = User.find(params[:id])
sign_in user, bypass: true
redirect_to root_path
end
action_item :only => :show do
link_to('Sign in As', sign_in_as_admin_user_path(user), method: 'put')
end