5

注册后,需要确认,我的应用程序重定向到经过身份验证的页面,因此身份验证失败,并且 Devise 重定向到登录路径。

由于第二次重定向,我注册后的 Flash 消息丢失了。

flash.keep在重定向到登录路径之前,我可以在 application_controller.rb 或助手中添加一个吗?如果有替代方案,我不希望为此覆盖设计控制器。

4

3 回答 3

5

注册后,在重定向到登录路径开始之前,我在会话中存储了一条 flash 消息(因为用户未确认它是“ after_inactive_sign_up_path_for ()”)

设计注册控制器:

class RegistrationsController < Devise::RegistrationsController
  protected
    def after_inactive_sign_up_path_for(resource)
      # store message to be displayed after redirection to login screen
      session[:registration_flash] = flash[:notice] if flash[:notice]
      super
    end
end 

然后,如果在登录请求期间出现此消息,我将显示此消息。设计会话控制器:

class SessionsController < Devise::SessionsController
  def new
    flash[:notice] = session.delete(:registration_flash) if session[:registration_flash]
    super
  end
end 
于 2013-04-23T14:45:43.647 回答
0

使用Devise Failure App 方法更新@rigyt 对最新设计的回答

如上面的链接所示,创建一个自定义故障应用程序。

lib/devise_failure.rb :

  def respond
    if http_auth?
      http_auth
    else
      # From original Devise Failure App
      store_location!
      if flash[:timedout] && flash[:alert]
        flash.keep(:timedout)
        flash.keep(:alert)
      else
        flash[:alert] = i18n_message
      end

      # Store flash temporarily in session because devise strips it
      session[:login_flash] = flash.to_hash

      redirect_to new_user_session_path
    end
  end

会话控制器:

  def new
    flash_from_session
    super
  end

  def flash_from_session
    if session[:login_flash]
      session[:login_flash].each do |arr|
        flash[arr.first] = arr.last
      end
      session.delete(:login_flash)
    end
  end

这将按预期设置闪烁并将它们从会话中删除。我还发现它适用于关键的cacheable_flash

于 2013-06-04T17:41:27.667 回答
-1

为什么不将默认的设计闪存消息更改为您希望消息说的任何内容?您可以编辑文件中的闪存消息devise.en.yml。我想你要找的在下面registrations signed_up_but_unconfirmed

于 2013-02-21T19:38:57.003 回答