【问题标题】:Creating an admin user in Devise on Rails beta 3在 Devise on Rails beta 3 中创建管理员用户
【发布时间】:2011-02-12 02:22:15
【问题描述】:

好吧,当有人回答这个问题时,我可能会觉得很愚蠢,但我错过了一个简单的事情,但是......这里是:

我在 rails 3 beta 上有一个全新的应用程序,我正在使用 devise 进行身份验证。我已经运行了所有的 cmets,目前一切正常。我已经创建了一个用户角色和一个管理员角色(按照这些说明:https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role)并且我已经将自己注册为第一个用户,但是如何注册或创建管理员角色用户?设计人员的指示将管理员角色设置为不可注册,但我不确定如果您无法注册,您应该如何创建管理员?!

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    是的。我觉得很笨。

    如果其他人也有同样无聊的时刻。只需使用 rails 控制台创建管理员用户:

    ➡ rails c
    Loading development environment (Rails 3.0.0.beta3)
    irb(main):001:0> admin = Admin.create! do |u|
    irb(main):002:1* u.email = 'sample@sample.com'
    irb(main):003:1> u.password = 'password'
    irb(main):004:1> u.password_confirmation = 'password'
    irb(main):005:1> end
    

    这样就可以了。现在只需访问您的管理员登录路径并登录。

    【讨论】:

    • 投票不是指你答案的第一句话。
    • 实际上,有多少 Rails 站点实际上是使用 Rails 控制台管理的?你知道吗,那些小事,到处都是标志场?
    • 可能通过控制台管理了一个可怕的数量。我知道我一直在使用它。但我想我们应该感谢 @dhh 创造了一种访问我们的 Rails 应用程序的好方法。
    • 从最新的 Devise 和 ActiveAdmin 开始,使用 AdminUser.create!而不是 Admin.create!感谢您的回答!
    【解决方案2】:

    您真正想做的是创建种子数据。 一种更标准的方法是将您的种子用户(和角色,如果您存储它们)添加到 db/seeds.rb

    以 db/seeds.rb 为例:

    roles = Role.create([{name: 'super_admin'}, {name: 'staff'}, {name:'customer'}])
    users = User.create([{email: 'super@test.com', first_name: 'super', last_name: 'admin', password: '@dmin123', password_confirmation: '@dmin123', role: roles[0]}])
    

    然后运行:

    rake db:seed
    

    【讨论】:

    • 这是正确的做法。
    【解决方案3】:

    这可能不适用于 Devise(但我相信它会),但一般来说,如果您想为管理员用户设置种子但又不想将管理员密码存储在源代码管理中,您可以执行类似的操作.. .

    @user = User.find_by_email("admin@email.com")
    
    unless @user
      # We are going to bypass both our assignment protection and validation
      # so we aren't storing the password in source control.
      #
      # This doesn't replace the need to change the password occasionaly, both
      # on the site and in source control.
      @user = User.create do |u|
        u.name = "Admin User"
        u.email = "admin@email.com"
        u.password_digest = "$2a$10$DUv/IUiLB34jhi3j4Z8MwwcaDlBmFe3rvcdXSzPKLzBOAMmD53UqW"
      end
    
      @user.save(:validate => false)
    
      # TODO make the user an admin
    end
    

    您可以在本地创建用户,使用您要查找密码摘要的密码。

    【讨论】:

    • 是否设计使用 md5 来消化密码?
    【解决方案4】:

    @Stewart 你是对的。在用户模型中使用管理标志是可以接受的,并且仍然可以与许多授权选项共存。查看 cancan 文档中的 Ability 类,以了解其外观示例:

    def initialize(user)
      if user.admin?
        can :manage, :all
      else
        can :read, :all
      end
    end
    

    如果功能确实不同或授权要求不同(例如向 authkeys 添加子域),则拥有多个授权模型会很有用。

    另一种方法是向您的用户添加 HABTM 角色关系。这是 Tony Amoyal 的一个很好的教程: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

    【讨论】:

      【解决方案5】:

      尝试将 /sign_in 附加到您的管理路径,无论您将其设置为什么......我的都是

      http://yoursite.com/admin/sign_in?unauthenticated=true

      【讨论】:

      • 哎呀你可能没有使用 :authenticable。尝试此页面以获取有关覆盖管理员视图的帮助:wiki.github.com/fortuity/subdomain-authentication/…
      • 不,我在使用 devise 设置管理模型时没有使用 :authenticable,就像我说的那样,我使用的是 divise 在他们的 github 页面上提供的教程。如果可以的话,我宁愿不使用子域...
      【解决方案6】:

      有一种方便的方式来填充表格 - db/seed.rb 文件。只需在其中添加用于创建用户的脚本并运行:

      rake db:seed
      

      您可以在下面看到带有emailusername 字段的User 模型示例:

      # Inserting default security users
      users = {
      
          admin: {
      
              username: 'admin',
              email: 'admin@gmail.com',
              password: 'adminpass',
              password_confirmation: 'adminpass',
              is_admin: true
          },
      
          administrator: {
      
              username: 'administrator',
              email: 'administrator@gmail.com',
              password: 'administrator',
              password_confirmation: 'administrator',
              is_admin: true
          }
      }
      
      users.each do |user, data|
      
        user = User.new(data)
      
        unless User.where(email: user.email).exists?
          user.save!
        end
      end
      

      请注意,此处应用了设计验证。

      Here 你可以找到更多使用seed.rb 文件的示例,here 是 rayn 的轨道演员。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多