设计关闭注册但使用管理员帐户种子数据库

Devise close registration but seed database with admin account

我希望完全关闭我的注册系统(暂时)并且只有 1 个管理员帐户可以被收集到数据库或种子。

Devise 完全可以做到这一点吗?或者关闭注册是否也会关闭我的管理员用户在其中的 seed/rake 任务?

我目前有一个具有典型设计设置的用户模型,其中有一个布尔值管理列 - 我目前正在开发中通过进入 rails 控制台并手动更改它来设置该列。

任何帮助都会很棒!

谢谢

devise wiki里面有详细的步骤;但基本上你可以跳过生成注册路由:

devise_for :users, :skip => :registrations

这将使它无法注册,从而使其成为单用户系统。

这需要使用种子文件或通过控制台创建第一个用户。

或者您可以创建自己的控制器来处理在第一个用户之后中断的注册:

devise_for :users, :controllers => {:registrations => "registrations"}

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  def create
    if User.any?
      redirect_to root_path, alert: 'Only one user allowed!' and return
    end
    super
  end
end

除非你的 seed/rake 任务正在做一些非常奇怪的事情,比如自动化 web 浏览器,否则这对你的 seed/rake 任务没有影响,因为它们通常涉及通过模型直接操作数据库,而不是通过控制器全部:

# Example of seeding an admin user:
admin = User.create_with(surename: 'Doe', forename: 'John').find_or_create_by(email: 'admin@example.com')
admin.add_role(:admin)

您应该能够删除设计路线以进行注册并仍然在用户中播种。只要您仍然拥有会话的设计路线,该用户就可以 login/logout。