设计 - 创建已确认的用户帐户而不发送电子邮件?

时间:2011-09-19 00:47:54

标签: ruby-on-rails devise

我整合了与facebook的设计。现在,当用户使用他/她的Facebook帐户登录后创建用户帐户时,

  user = User.create(:email => data["email"], 
                     :password => Devise.friendly_token[0,20]) 
  user.confirmed_at = DateTime.now
  user.save!

即使帐户已确认,仍会触发确认电子邮件。知道我怎么能把电子邮件关掉?

2 个答案:

答案 0 :(得分:134)

确认回调发生在创建之后,因此在手动设置confirmed_at之前,它发生在示例的第1行。

根据评论,最正确的做法是使用为此目的提供的方法#skip_confirmation!。手动设置confirmed_at将起作用,但它会绕过提供的API,这是应该尽可能避免的。

所以,比如:

user = User.new(user_attrs)
user.skip_confirmation!
user.save!

原始答案:

如果您将confirmed_atcreate个参数一起传递,则不应发送邮件,因为对帐户是否已经“确认”的测试是要查看是否该日期已设定。

User.create(
  :email => data['email'], 
  :password => Devise.friendly_token[0,20], 
  :confirmed_at => DateTime.now
)

那样,或者只使用new代替create来构建您的用户记录。

答案 1 :(得分:11)

如果您只是想阻止发送电子邮件,可以使用#skip_confirmation_notification,如下所示:

user = User.new(your, args)
user.skip_confirmation_notification!
user.save!

请参阅documentation

  

跳过发送确认/再确认通知电子邮件   after_create / after_update。与#skip_confirmation!不同,记录仍然存在   需要确认。