Rails - 401仅在生产中访问操作时未经授权

时间:2013-10-03 20:00:07

标签: ruby-on-rails-3 devise

我正在使用Ruby On Rails 3.0.9,一切都在开发环境中运行良好。当我切换到Production env,或者我将其上传到我们的服务器时,登录后我将被带回同一个登录页面。当我检查日志时,我可以看到以下内容:

Started POST "/users/login" for 127.0.0.1 at Thu Oct 03 16:48:13 -0300 2013
  Processing by UserSessionsController#create as HTML
  Parameters: {"user"=>{"password"=>"[FILTERED]", "login"=>"demo_admin"}, "utf8"=>"✓", "authenticity_token"=>"+7AEoVXZ9XiagEymVUnOhFHnck4rgDu883E/ySMlCxQ="}
Redirected to http://localhost:3000/admin
Completed 302 Found in 111ms


Started GET "/admin" for 127.0.0.1 at Thu Oct 03 16:48:13 -0300 2013
  Processing by Admin::DashboardController#index as HTML
Completed 401 Unauthorized in 1ms

我正在使用authorization_rules文件来管理访问权限,但我在Dev env上没有问题,正如我之前所说的那样。

如果我在admin/dashboard#index动作处放置一个断点,它将不会被执行,因为它没有到达。它打破了httpserver文件(我一步一步地调试它),但我无法理解为什么它适用于Dev而不是Prod env。

请帮助。

谢谢, 布赖恩

更新

我想知道,在我的ApplicationController中,有一个名为check_plan_features的before_filter,它要求的第一件事是unless current_user.blank? #redirects to Admin section

我注意到在使用Devise登录后,current_user具有用户的值,但在重定向到admin部分后,它会返回到同一个过滤器,这次是{{1 }} 一片空白。 所以,我认为,不知何故,用户的会话在尝试访问Admin部分后被销毁。但是,由于这只发生在生产环境中,我仍然想知道可能是什么。

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题(使用rails 4和设计3)。

解决方案是将域声明添加到config/initializers/session_store.rb文件中,如下所示:

YourAppName::Application.config.session_store :cookie_store, key: '_your_session', domain: {
  production: 'production_domain',
  development: 'development_domain'
}.fetch(Rails.env.to_sym, :all)

尽管最初由于向应用程序添加子域而更改了这一点很重要。