【问题标题】:Rails 3 with Devise for Authentication - How do I manually create a user?Rails 3 with Devise for Authentication - 如何手动创建用户?
【发布时间】:2011-06-03 17:01:00
【问题描述】:

我想手动创建新的Users,而不是强制他们验证他们的电子邮件地址。

这个想法是让现有用户无需注册即可自动添加他们的朋友。这对我正在解决的业务案例很有意义。

Devise 如何做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 devise registration


    【解决方案1】:

    skip_confirmation! 方法适用于任何confirmable 模型。

    @user = User.new params[:user]
    @user.skip_confirmation! # Sets confirmed_at to Time.now, activating the account
    @user.save
    

    用户帐户将被激活。如果您不想这样,请继续阅读。

    Devise 使用条件回调来生成确认令牌并发送电子邮件。只有当confirmation_required? 返回true 时,才会调用回调。在您的模型上重新定义它:

    def confirmation_required?
      false
    end
    

    但是,这将使active_for_authentication? 方法始终返回true,因为它考虑了是否需要确认。我们也必须重新定义它:

    def active_for_authentication?
      confirmed? || confirmation_period_valid?
    end
    

    这样,帐户将保持非活动状态,并且不会发送确认电子邮件。您必须通过在记录上调用confirm! 或将confirmed_at 设置为任何日期来手动激活用户。

    这是一个 hack,但它应该可以工作。

    供参考:confirmable.rb

    【讨论】:

    • 谢谢。但我不希望用户能够登录。将设置用户确认允许用户如何登录?那会做什么,只是阻止发送电子邮件?谢谢
    • 另外,当我尝试像你上面提到的那样保存一个新用户时,我在@user.save 上得到 FALSE .... 除了电子邮件之外,保存用户还需要哪些其他字段?跨度>
    • 我更新了我的答案。任何在您的架构上标记为非空的字段或您的模型验证其存在的字段都是必需的。如果您不提供它们,Active Record 将不会保存您的对象。
    • 如果你想创建一个只有电子邮件地址的用户,那么你可以通过 u.save(:validate => false) 去激活验证
    • 活动?重命名为 active_for_authentication? (从设计版本 1.2.0)
    【解决方案2】:

    我只想添加以供将来参考,自 Devise 2.2 以来,现在还有一个可用的 skip_confirmation_notification! 方法,它基本上可以完成 Matheus 帖子中的所有操作,而无需重新定义模型中的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多