【问题标题】:Rails 4.2.5: strange behavior of before_action with passenger vs webrickRails 4.2.5:before_action 与乘客与 webrick 的奇怪行为
【发布时间】:2016-01-28 08:53:19
【问题描述】:

以下是我的带有 before_action 的控制器

class Admin::ApplicationController < ApplicationController
  before_action :authenticate_admin!

  #
  # ....
  #
end

class Admin::DashboardController < Admin::ApplicationController
  def show
  end
end

routes.rb:

  namespace :admin do
    root :to => "dashboard#show"  # to match the route /admin
  end

我正在使用设备进行身份验证。与乘客 5.0.23 一起使用时的问题是,当我第一次从浏览器访问 /admin 而不登录时,我被重定向到 /admins/sign_in,这是完美的。如果我再次尝试访问 /admin 而不登录,它会将我带到仪表板。所以 before_action 被忽略了。现在,如果我修改上述任何控制器或重新启动乘客,则 before_action 再次适用于对 /admin 的即时请求,但不适用于后续请求。

我尝试使用乘客 5.0.15,它与 Rails 4.1.5 的另一个应用程序一起工作正常,但它没有解决问题。我无法尝试将 rails 降级到 4.1.5,因为它引发了许多其他错误。

当我使用 webrick 运行上述相同的应用程序时,before_action 每次都可以正常工作。

有没有人遇到上述问题?任何想法可能是上述问题的原因以及解决问题的任何建议?提前致谢。

编辑: 当与 webrick 一起使用时,这个问题似乎也存在。我有两种身份验证。一个用于用户,另一个用于管理员。使用 webrick,问题在两种身份验证之间切换。如果 before_action 适用于 authenticate_user!,则它不适用于 authenticate_admin!反之亦然。与乘客一样,它既不适用。这似乎只发生在开发模式中。

【问题讨论】:

    标签: ruby-on-rails devise passenger


    【解决方案1】:

    我想我找到了解决问题的方法。我将 Admin::ApplicationController 重命名为 Admin::BaseController 并在所有管理控制器中继承了它。 before_filters 现在按预期工作,但仍然不确定为什么使用 Admin::ApplicationController 是错误的。类名“ApplicationController”是否让 ruby​​ 解释器感到困惑?因为继承层次是:

     Admin::DashboardController < Admin::ApplicationController < ApplicationController
    

    所以对于 Admin::DashboardController,似乎只有一个 ApplicationController 并忽略了 Admin::ApplicationController。可能会!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2011-07-23
      • 2012-04-27
      • 2012-01-19
      • 2021-10-30
      • 2022-01-20
      • 2018-12-11
      相关资源
      最近更新 更多