我想将我的应用程序发布给一组选定的个人以进行私人测试。我为此任务创建了一个子域:beta.company.com。
该应用程序在我的工作站上按预期运行,但是当我将其推送到服务器时,该应用程序会不断路由回身份验证页面。仅供参考,我正在使用声明性授权、授权逻辑和乘客。
路线.rb:
#Application controller
match "/not_authorized", :to => "application#not_authorized", :as => :not_authorized
#UserSessions controller
match "/quit", :to => "user_sessions#destroy", :as => :quit
match "/authenticate", :to => "user_sessions#new", :as => :authenticate
resources :user_sessions, :only => :create
#Users controller
match "/enroll", :to => "users#new", :as => :enroll
# root url
root :to => "users#index"
症状:
- 匿名路由(例如 user_sessions#create、not_authorized)按预期对 anon 工作。用户
- 该应用程序在我的工作站上按预期运行
当我查看 production.log 时,我看到如下条目:
由 UsersController#index 处理为 HTML 权限被拒绝:没有为 #@role_symbols=[:guest]> 的索引找到匹配规则(角色 [:guest]、权限 [:index、:read、:manage]、上下文 :users)。重定向到http://beta.company.com/authenticate
** 编辑 **
一方面,没有 UsersController#index 操作,如果有,匿名用户将无权访问它。我很困惑为什么它试图在那里路由(而不是根 url,这是它应该在成功认证后去的地方)。
这似乎是一个特定于子域的路由问题,但我不能确定。
更仔细地重新阅读这个“错误”。有一个 UserController#index 操作,匿名用户不应该访问它。乍一看,我以为它读取了UserSessionController#index,这是不存在的动作。
现在,似乎没有创建或保存经过身份验证的用户,因此被重新路由回 UserSession#new 操作(AKA 身份验证路径)。
** / 编辑 **
** 编辑二 **
我从 cookie_store 更改为 active_record_store:
# cookie store
# MyApp::Application.config.session_store :cookie_store, :key => '_myApp_session'
# active-record store
MyApp::Application.config.session_store :active_record_store
添加表($ rake db:sessions:create),进行迁移($ rake db:migrate),重新启动 Apache($ touch tmp/restart.txt),清除浏览器的缓存,然后重新启动浏览器。
会话已成功添加到会话表中,但我仍然遇到问题。
** / 编辑二 **
非常感谢您的想法。