0

我有应用程序,并连接了活动管理员。我试图让管理员用户通过活动管理员以任何用户身份登录,而无需使用 devises 的sign_in @user方法输入密码。是否可以开箱即用地实现这一目标?

我可以在参数/会话中使用用户名进行重定向,但这并不安全,就好像我不想在活动管理员之外传递任何东西一样。

有任何想法吗?

4

2 回答 2

0

您可以通过使用其他方法首先对管理员进行身份验证来做到这一点,

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   
于 2013-07-17T15:54:39.507 回答
0

我不确定您所说的“不安全”到底是什么意思;设计内部可以确保您是管理员用户等,您需要传递的只是新用户的用户名。也就是说,下面的代码完全在 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
于 2013-07-17T14:38:24.907 回答