设计 - 在不发送电子邮件的情况下创建已确认的用户帐户?
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_at
与create
参数一起传递,则不应发送邮件,因为测试帐户是否已“确认”是查看是否设置了该日期.
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 应用程序的情况下从后台异步发送大量电子邮件?