我在rails 5 app上。使用设计进行用户管理。我在我的用户模型中启用了“确认”,并且迁移也是相同的。我已经创建了一个从Devise :: Mailer派生的自定义邮件程序类,已经在设计配置中设置邮件程序以使用自定义邮件程序类,但我的确认电子邮件未正确发送。 已经尝试了很多这样的答案线程,但还是无法破解它。我哪里可能出错?
用户模型
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
after_create :send_confirmation_email
def send_confirmation_email
p 'inside after_create callback func.'
MyDeviseMailer.confirmation_instructions(self).deliver
end
end
迁移可确认
def up
add_column :users, :confirmation_token, :string
add_column :users, :unconfirmed_email, :string
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_sent_at, :datetime
add_index :users, :confirmation_token, unique: true
end
我的自定义邮件程序类派生自Devise :: Mailer
class MyDeviseMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
default template_path: 'devise/mailer'
def confirmation_instructions(record, token, opts={})
devise_mail(record, :confirmation_instructions, opts)
end
end
答案 0 :(得分:1)
几个小时之后,我发现我正在采取错误的做事方式。在here之后写了一篇写得很好的文章。更新了我的解决方案:
重构了我的自定义邮件程序类中的 confirmation_instructions 方法,如下所示:
def confirmation_instructions(record, token, opts={})
if record.email.present?
opts[:subject] = "Welcome #{record.email.split('@').first.capitalize}, Confirm your asana account"
else
opts[:subject] = "Confirm Your Asana Account"
end
super
end
在用户模型中将功能调用更改为此内容:
MyDeviseMailer.confirmation_instructions(self, self.confirmation_token).deliver
这最终对我有用。