【问题标题】:Rails: Customize Devise Confirmable module?Rails:自定义设计可确认模块?
【发布时间】:2010-12-14 16:59:13
【问题描述】:

我使用 Devise 设置了我的 Rails 应用程序,但它仍处于开发阶段。我还有一个创建默认管理员用户的 Thor 任务。

问题是在帐户得到确认之前,Devise 不会让该管理员用户登录网站。有什么办法可以禁用用于创建特定用户的可确认模块,例如管理员?

我的雷神任务:

class Setup < Thor
  desc "create_admin [EMAIL] [PASSWORD]", "Creates the administrative user."
  def create_admin(email = "admin@bogus.com", password = "testpassword123")
    require File.expand_path('config/environment.rb') # load Rails environment
    admin = User.create(:email => email, :password => password, :password_confirmation => password)
    admin.assign_role :admin
    puts "Admin user (#{ email }) created."
  end
end

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    创建用户后,您可以致电提供的设备确认!方法,而不是直接更新数据库。例如:

    admin = User.create(:email => email, :password => password, :password_confirmation => password)
    admin.assign_role :admin
    admin.confirm!
    

    【讨论】:

    • 这还有一个额外的好处,那就是不需要将confirmed_at 设置为可访问的属性,这样用户就可以在不经过实际确认过程的情况下确认自己!
    • 啊,谢谢。我在种子数据中创建用户并传递了一个 confirm_at 值,但它只是忽略了它。你必须通过确认方法。
    【解决方案2】:

    这应该可行

    admin = User.create(:email => email, :password => password, :password_confirmation => password)
    

    所以你的confirmed_at 被设置了,这是设计检查用户确认时所指的字段。

    编辑

    如果这看起来像一个黑客,请原谅我,但这似乎对我有用。执行上述行后,

    admin.update_attributes(:confirmed_at => Time.now)
    

    【讨论】:

    • 我这样做了,但用户仍在使用confirmed_at 创建为nil。什么给了?
    • 不,仍然注册为nil
    • 您的update_attributes 不起作用,但如果我手动设置值并保存记录,它会起作用:admin.confirmed_at = Time.now \ admin.save。为什么在 create 方法或 update_attributes 方法中指定时这不起作用?这两个似乎都比我刚才描述的手动操作要干净得多......
    • 好吧,我感觉很迟钝:我忘记将confirmed_at 添加到我的模型的可访问属性列表中(通过attr_accessible)。您的第一种方法现在按预期工作。我的错。谢谢!
    • 如果您将confirmed_at 设为可访问的属性,这可能会非常危险,因为如果用户制作了自己的帖子属性,它将允许用户确认自己。请参阅我的.confirm! 方法,了解更明智的方法。
    【解决方案3】:

    只需在用户或管理员模型中评论 :confirmable

    devise :database_authenticatable, :recoverable, :rememberable, :trackable, #:confirmable...
    

    在 config/initializers/devise.rb 您可以在此处设置用户必须确认他的帐户的时间

    【讨论】:

    • 我的管理员用户是用户类型;我仍然希望 :confirmable 可用于所有其他类型的用户,而不是管理员。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 2011-11-18
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多