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

Posted

技术标签:

【中文标题】设计 - 在不发送电子邮件的情况下创建已确认的用户帐户?【英文标题】:Devise - create user account with confirmed without sending out an email? 【发布时间】:2011-11-19 21:31:30 【问题描述】:

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

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

即使帐户已被确认,仍会发送一封确认电子邮件。知道如何关闭电子邮件吗?

【问题讨论】:

:confirmation 从传递给设计用户类的模块列表中取出?因为你实际上并没有使用它。 好吧,但是在我的网站上注册的其他用户需要通过电子邮件确认 我认为@disappeardng 是在要求例外情况。 【参考方案1】:

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

根据 cmets,最正确的做法是使用为此目的提供的方法,#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 来建立您的用户记录。

【讨论】:

仅供参考,我必须将 Confirmed_at 声明为 attr_accessible(不知道这是否是潜在的安全漏洞)。除此之外,这行得通! 使用 User.new 和 user.skip_confirmation!以避免必须使 confirm_at 可访问。 使用新的不起作用,因为当您调用保存时会发送电子邮件! @waldo 对 skip_confirmation 的建议虽然有效 @Khash 不,关键是你需要在保存之前设置confirmed_at。简单地使用new 而不是create 不会改变任何事情,但是如果他使用new 然后在保存之前设置confirmed_at,则不会发送电子邮件。事实上,所有skip_confirmation! 所做的都是设置confirmed_at 话虽如此,让提供的skip_confirmation! 来处理实际工作更可取。【参考方案2】:

如果你只是想阻止发送邮件,你可以使用#skip_confirmation_notification,像这样:

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

见documentation

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

【讨论】:

这对我有用!最佳答案没有。 :(谢谢!:)

以上是关于设计 - 在不发送电子邮件的情况下创建已确认的用户帐户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不关闭当前 Firebase 会话的情况下创建用户身份验证 [重复]

如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?

如何在不显示确认屏幕的情况下直接发送消息? [复制]

Zend Mail - 如何在不将电子邮件标记为已打开的情况下阅读

如何检查用户电子邮件是不是已验证?

设计在更新时不确认电子邮件