注册后,需要确认,我的应用程序重定向到经过身份验证的页面,因此身份验证失败,并且 Devise 重定向到登录路径。
由于第二次重定向,我注册后的 Flash 消息丢失了。
flash.keep
在重定向到登录路径之前,我可以在 application_controller.rb 或助手中添加一个吗?如果有替代方案,我不希望为此覆盖设计控制器。
注册后,需要确认,我的应用程序重定向到经过身份验证的页面,因此身份验证失败,并且 Devise 重定向到登录路径。
由于第二次重定向,我注册后的 Flash 消息丢失了。
flash.keep
在重定向到登录路径之前,我可以在 application_controller.rb 或助手中添加一个吗?如果有替代方案,我不希望为此覆盖设计控制器。
注册后,在重定向到登录路径开始之前,我在会话中存储了一条 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
使用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
为什么不将默认的设计闪存消息更改为您希望消息说的任何内容?您可以编辑文件中的闪存消息devise.en.yml
。我想你要找的在下面registrations
signed_up_but_unconfirmed