在 rails 上设计可确认 5 不工作
devise confirmable on rails 5 not working
我正在使用 rails 5 应用程序。使用设备进行用户管理。我在我的用户模型中启用了 'confirmable' 并且迁移也是一样的。我创建了一个派生自 Devise::Mailer 的自定义邮件程序 class,并在设计配置中设置了该邮件程序以使用自定义邮件程序 class,但是我的确认电子邮件未正确发送。
已经尝试了很多这样的答案线程,但还无法破解。我哪里会出错?
用户模型
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
我的自定义邮件程序 class 来自 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
几个小时后,我发现我在 things.Followed here 上写得很好的文章是错误的。在下面更新了我的解决方案:
重构 confirmation_instructions 方法存在于我的 自定义邮件程序 class 中,如下所示:
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
这就是最终对我有用的方法。
我正在使用 rails 5 应用程序。使用设备进行用户管理。我在我的用户模型中启用了 'confirmable' 并且迁移也是一样的。我创建了一个派生自 Devise::Mailer 的自定义邮件程序 class,并在设计配置中设置了该邮件程序以使用自定义邮件程序 class,但是我的确认电子邮件未正确发送。 已经尝试了很多这样的答案线程,但还无法破解。我哪里会出错?
用户模型
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
我的自定义邮件程序 class 来自 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
几个小时后,我发现我在 things.Followed here 上写得很好的文章是错误的。在下面更新了我的解决方案:
重构 confirmation_instructions 方法存在于我的 自定义邮件程序 class 中,如下所示:
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
这就是最终对我有用的方法。