devise-Rails 3-Active_admin可以使用现有的用户模型吗?

Active Admin可以使用我当前的Devise用户模型吗? 它已经有一个名为admin的列,如果是true,我想在转到/admin时绕过Active admin登录。

这可能吗?

当前路线:

#Active admin
ActiveAdmin.routes(self)

#Devise
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users, :path => "account"

其余的基本上是标准的Devise + Active admin

Frexuz asked 2020-01-23T19:15:58Z
4个解决方案
70 votes

是的,您可以这样做,在运行生成器时,跳过用户模型的创建:

rails generate active_admin:install --skip-users

然后在您的config.authentication_method中:

# == User Authentication
#
# Active Admin will automatically call an authentication
# method in a before filter of all controller actions to
# ensure that there is a currently logged in admin user.
#
# This setting changes the method which Active Admin calls
# within the controller.
config.authentication_method = :authenticate_admin!

取消注释config.authentication_method的注释,并为您的管理员提供身份验证方法,例如:

# app/controllers/application_controller.rb
def authenticate_admin!
 redirect_to new_user_session_path unless current_user.is_admin?
end

重新启动服务器,它应该可以正常工作。 还可以看一下Active Admin配置

希望这可以帮助。

JCorcuera answered 2020-01-23T19:16:29Z
26 votes

如前所述,您将需要更新:delete以反映正确的auth方法。

此外,但是,您还将希望更新以下设置:

# This setting changes the method which Active Admin calls
# to return the currently logged in user.
config.current_user_method = :current_admin_user

config.current_user_method = :current_user

# This setting changes the path where the link points to. If it's
# a string, the strings is used as the path. If it's a Symbol, we
# will call the method to return the path.
#
# Default:
config.logout_link_path = :destroy_admin_user_session_path

config.logout_link_path = :destroy_user_session_path

当然,您不必更新这些方法(或后文中提到的方法),而只需覆盖其他地方的方法,但这似乎是最简单/最干净的方法。 显然,您需要使用devise身份验证将每个设置(2715716287396840840)中的“用户”替换为模型名称。

我也建议您在那里时也更新以下设置:

# This setting changes the http method used when rendering the
# link. For example :get, :delete, :put, etc..
#
# Default:
config.logout_link_method = :get

config.logout_link_method = :delete

如果您的设备配置所使用的默认HTTP方法设置为:delete,则除非您更改了它,否则最后一次更改是必需的。 现在,它们已经同步很重要,因为如果您遵循这些说明,将使用destroy_user_session_path,这是devise已定义的路径。 否则,您将收到一条消息,指出[GET] / users / sign_out路由不存在。

jamesconant answered 2020-01-23T19:17:25Z
4 votes

所有其他人所说的所有内容,以及在[http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/]

如果您已经选择实现了admin_user模型(例如,现在您既有“用户”又有“ admin_user”模型)时选择返回到具有单个用户模型的选项,则会在信息上增加一些其他信息 。

包括的其他步骤

从route.rb删除devise_for :admin_users, ActiveAdmin::Devise.config将代码从app/admin/admin_user.rb复制到app/admin/user.rb(仅使用所需的内容)像这个家伙(和我一样)删除app/admin/admin_user.rb(否则您将在AdminUser上收到未初始化的常量错误)。

Jay Killeen answered 2020-01-23T19:17:59Z
4 votes

如果您已经使用默认设置安装了ActiveAdmin,并且要在现有模型上使用:get字段对用户进行身份验证,然后删除admin_user表,则执行以下过程:

回滚admin_user迁移(如果在安装Active Admin时未使用:get):

rake db:migrate:down VERSION=20141205110842 # create_active_admin_comments.rb
rake db:migrate:down VERSION=20141205110831 # add_devise_to_admin_users.rb
rake db:migrate:down VERSION=20141205110820 # devise_create_admin_users.rb

然后删除这3个文件。

在路由中,删除线:get

在application_controller.rb中,添加:

def authenticate_admin!
  if current_user && current_user.is_admin
    # fine
  else
    redirect_to new_user_session_path
  end
end

在active_admin.rb中:

config.authentication_method = :authenticate_admin!
config.current_user_method = :current_user
config.logout_link_path = :destroy_user_session_path
config.allow_comments = false
config.logout_link_method = :get # couldn't get active_admin to sign out via :delete. So I configure devise to sign out via :get.

要配置devise通过:get退出,请添加devise.rb:

config.sign_out_via = :get
# And for every occurrence of destroy_user_session_path, remove the option method: delete.

创建is_admin迁移:

rails g migration add_is_admin_to_user is_admin:boolean

像这样编辑迁移:

class AddIsAdminToUser < ActiveRecord::Migration
  def change
    add_column :users, :is_admin, :boolean, default: false
  end
end

并迁移:

rake db:migrate

如果在轨道4中,请不要忘记在allow_params中添加is_admin。 在app / admin / user.rb中:

permit_params ....., :is_admin

在控制台中为管理员用户添加权限:

u = User.find(42); u.is_admin = true; u.save

请享用

Benjamin Crouzier answered 2020-01-23T19:19:12Z
translate from https://stackoverflow.com:/questions/8360787/rails-3-can-active-admin-use-an-existing-user-model