设计:重新发送确认电子邮件时,请更改Flash消息

dpa*_*age 3 ruby-on-rails devise

我正在设置Devise,以便用户可以登录并使用该网站,而无需确认他们的电子邮件地址,类似于这个问题.但是,除非他们已经确认,否则网站上有一些用户无法使用的功能.

好没关系.我可以检查一下current_user.confirmed?.如果他们没有得到确认,我可以在页面上放一个按钮让他们请求再次发送确认.

我遇到的问题是,当他们在登录时执行此操作时,他们在结果页面上看到的Flash消息是"您已经登录".哪个不理想 - 我只想提出确认已发送的消息.

我开始试图弄清楚Devise::ConfirmationController要覆盖哪种方法,以及什么,但我希望有人已经这样做了.

fly*_*ish 6

Flash说"你已经登录"的原因是因为用户被重定向到new_session_pathafter_resending_confirmation_instructions_path_for方法.我会覆盖此方法以检查它们是否已登录.如果是,则不要重定向到new_session_path,设置您的Flash消息并重定向到另一个页面.

将确认控制器放入,覆盖确认控制器 controllers/users/confirmations_controller.rb

class Users::ConfirmationsController < Devise::ConfirmationsController

  protected

  def after_resending_confirmation_instructions_path_for(resource_name)
    if signed_in?
      flash[:notice] = "New message here" #this is optional since devise already sets the flash message
      root_path
    else
      new_session_path(resource_name)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

将confirmmationsController添加到routes->

devise_for :users, :controllers => {:confirmations => 'users/confirmations' }
Run Code Online (Sandbox Code Playgroud)