会话值在重定向rails 4后重置
我正在使用设计3.5.1,rails 4.0.0和ruby 2.0.0-p0。
如果用户未登录并尝试打开需要身份validation的私有页面,请使用lvh.me:3000/users/1/edit
,然后设计将针对关键user_return_to
在会话中添加users/1/edit
。 问题是当用户在身份validation失败后被重定向到登录页面时,会话中的user_return_to
值会重置。
我的应用程序遍布此问题。 如果我在会话中存储值并从同一操作重定向到另一个路径,则会话值将消失。
注意:我已将rails应用程序从(rails 3.0.4,ruby 1.8.7)升级到(rails 4.0.0,ruby 2.0.0)。
对不起,问题中有任何含糊之处。 如果您有任何疑问,请发表评论。
更新:
在我的应用程序控制器中,我添加了一个beforefilter来validation用户身份。 应用程序控制器中仅显示相关代码。
application_controller.rb
class ApplicationController :devise_controller? # rest of the code end
我正在使用inheritanceDevise::FailureApp
的自定义失败类。 代码看起来像这样。
custom_failure.rb
class CustomFailure < Devise::FailureApp def redirect_url eval "new_user_session_path" end def redirect store_location! flash[:alert] = i18n_message # session[:user_return_to] returns '/foobar' here. redirect_to redirect_url end end
我在上面的代码中注释了一行。 session [:user_return_to]在该行可用,但在下一行重定向后,会话[:user_return_to]变为nil。
我已将设计从1.5.3升级到3.5.1。
我在这里添加解决方案以防其他人遇到同样的问题。
我的应用程序中有一个名为asset的资源,它与资产管道冲突。 每当我的url包含’资产’,例如’/ assets’时,会话就会重置。 因此,如果您有一个名为asset的资源,那么您必须更改资产管道的前缀。 为此,请在application.rb文件中添加以下行。
config.assets.prefix = '/static_assets'
您还必须将资产管道文件夹重命名为static_assets
。
请注意,此解决方案仅适用于您的应用程序中有一个名为Asset
的资源且rails版本为3.1+的情况