Rails 3中使用Devise进行身份验证 - 我如何手动创建用户?

34

我想手动创建新的User用户,而不强制要求他们验证电子邮件地址。

这个想法是允许现有用户自动添加他们的朋友,而不需要他们进行注册。这对我正在解决的业务案例是有意义的。

如何使用Devise实现这一点?

2个回答

50

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设置为任何日期来手动激活用户。

这是一种相当取巧的方法,但应该可以正常工作。

参考链接:confirmable.rb


1
谢谢。但我不希望用户能够登录。将用户设置为已确认是否允许用户以某种方式登录?那会做什么,只是防止发送电子邮件吗?谢谢。 - AnApprentice
另外,当我尝试像你上面提到的那样保存一个新用户时,@user.save返回FALSE...除了电子邮件,还需要哪些字段才能保存用户? - AnApprentice
我更新了我的回答。在您的模式中标记为非空或由您的模型验证其存在的任何字段都是必需的。如果您不提供它们,Active Record 将无法保存您的对象。 - Matheus Moreira
2
如果您想仅使用电子邮件地址创建用户,则可以通过u.save(:validate => false)来停用验证。 - Bachet
2
active? 被重命名为 active_for_authentication?(从 devise 版本 1.2.0 开始) - santuxus

9

我想要在以后的参考中添加一点内容,自从Devise 2.2版本以来,现在也有一个skip_confirmation_notification!方法可用,它基本上执行了Matheus帖子中重新定义方法所做的所有事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接