为什么Devise gem的可恢复模块不起作用?

时间:2012-10-18 14:40:35

标签: ruby-on-rails devise password-recovery

我有UserMailer类,下一个代码:

User.rb:

 devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

  -----------------

 class UserMailer < ActionMailer::Base

 default :from => "denys.medynskyi@gmail.com"

 def password_reset(user, password)
   @user = user
   @password = password
  mail(:to => user.email,
     :subject => 'Password Reset Notification')
  end

  def congrats_email(user)
    mail(to: user.email, subject: "Welcome Message")
 end

 end

为setup_mail.rb:

    ActionMailer::Base.smtp_settings = {
   :address              => "smtp.gmail.com",
   :port                 => 587,
   :domain               => "gmail.com",
   :user_name            => "denys.medynskyi",
   :password             => "********",
   :authentication       => "plain",
   :enable_starttls_auto => true
    }

来自devise.rb:

Devise.setup do |config|
  # ==> Mailer Configuration
  config.mailer_sender = "UserMailer"
end

忘记密码提交后我转到某个页面,但它没有告诉我任何通知adn不发送电子邮件。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不是100%确定这是导致您遇到任何或所有问题的原因,但如果您尝试使用Devise,则会覆盖某些默认邮件程序行为但不会所有,你应该继承Devise::Mailer而不是ActionMailer::Base

所以

class UserMailer < Devise::Mailer

编辑:DeviseDevise::Mailer中调用以呈现密码重置邮件模板的方法为reset_password_instructions。所以你的方法甚至没有覆盖它。此外,Devise的工作方式,它是最终调用发送指令电子邮件的方法的资源。 reset_password_instructions方法的工作只是从视图模板生成电子邮件。所以在我看来,你上面得到的代码并没有真正使用正常的Devise流程。在您的应用中调用password_reset的内容是什么?