ruby-on-rails 设计-创建用户帐户与确认不发送电子邮件?

b5lpy0ml  于 2022-12-15  发布在  Ruby
关注(0)|答案(3)|浏览(128)

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

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

即使帐户已经确认,确认邮件仍然被发送。2你知道我怎样才能关闭邮件发送吗?

vhmi4jdf

vhmi4jdf1#

confirm回调发生在create之后,因此它发生在示例的第1行,在手动设置confirmed_at之前。
根据注解,最正确的做法是使用为此目的提供的方法#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来构建用户记录。

s3fp2yjn

s3fp2yjn2#

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

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

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

ssgvzors

ssgvzors3#

打开Rails控制台

rails c

注意用户(通过id)或使用rails帮助器方法,例如first、last。创建一个变量来保存用户。

user =  User.last

使用skip_confirmation帮助器确认用户,然后保存。

user.skip_confirmation
user.save

相关问题