Ruby on rails 3 设置designe omniauth_path_前缀不';行不通
我正在开发一个基于Rails的API。我最近开始尝试对其进行版本设置。(我正在使用gem,以防万一)一个版本(“v2”)使用designe和Omniauth通过Facebook/Twitter对用户进行身份验证 我希望与此版本关联的所有路由都具有适当的版本前缀(因此Ruby on rails 3 设置designe omniauth_path_前缀不';行不通,ruby-on-rails-3,devise,routes,omniauth,Ruby On Rails 3,Devise,Routes,Omniauth,我正在开发一个基于Rails的API。我最近开始尝试对其进行版本设置。(我正在使用gem,以防万一)一个版本(“v2”)使用designe和Omniauth通过Facebook/Twitter对用户进行身份验证 我希望与此版本关联的所有路由都具有适当的版本前缀(因此users/:username/foo变成v2/users/:username/foo,等等),但我已经发现将design\u for放在api\u version块中会阻止designe助手(current\u user,user\
users/:username/foo
变成v2/users/:username/foo
,等等),但我已经发现将design\u for
放在api\u version
块中会阻止designe助手(current\u user
,user\u signed\u in?
等)停止工作,因此它继续生活在区块外:
routes.rb:
devise_for :user, :path => '', :controllers => {:omniauth_callbacks => 'users/omniauth_callbacks'}, :skip => [:registrations, :confirmations, :sessions, :passwords]
api_version(:module => "V2", :path=>"v2") do
resources :authentications, :only => [:update, :destroy]
devise_scope :user do
post 'login' => 'sessions#create', :as => 'user_session'
get 'logout' => 'sessions#destroy'
post 'password' => 'devise/passwords#create'
put 'password' => 'devise/passwords#update'
end
end
一切似乎都很棒…除了Desive生成的omniauth路线:
rake路由输出:
user_omniauth_authorize /auth/:provider(.:format)
user_omniauth_callback /auth/:action/callback(.:format)
现在,一些google fu透露这有一个Deviate配置设置,所以我在我们的Deviate初始化器中添加了以下内容(config/initializers/designe.rb
):
现在,rake routes生成看起来合理的路径:
user_omniauth_authorize /v2/auth/:provider(.:format) v2/users/omniauth_callbacks#passthru {:provider=>/(?!)/}
user_omniauth_callback /v2/auth/:action/callback(.:format) v2/users/omniauth_callbacks#(?-mix:(?!))
但是,当我试图通过调用api.localhost/v2/auth/facebook
来访问此路由时,我得到一个路由错误:
ActionController::RoutingError (No route matches [GET] "/v2/auth/facebook")
知道这是怎么回事吗?您在路由中缺少提供商名称,因此它们与
/v2/auth/facebook
中的facebook
部分不匹配。正确的路由目的地应该类似于v2/users/omniauth\u回调(?-mix:facebook)
您是否在用户模型中指定了提供程序
devise_for ..., :omniauthable, :omniauth_providers => [:facebook]
为了记录在案,我正在使用Rails 3.2和Desive 3.0,修改后的路线似乎有效(我还没有进一步了解是否会出现其他问题).路由中缺少提供商名称,因此它们与
/v2/auth/facebook
中的facebook
部分不匹配。正确的路由目的地应该类似于v2/users/omniauth\u回调(?-mix:facebook)
您是否在用户模型中指定了提供程序
devise_for ..., :omniauthable, :omniauth_providers => [:facebook]
为了记录在案,我正在使用Rails 3.2和Desive 3.0,修改后的路线似乎有效(我还没有进一步了解是否会出现其他问题).谢谢你的回答。不幸的是,该项目在过去十个月里变化太大,我无法确定它是否有效。谢谢你的回答。不幸的是,该项目在过去十个月里变化太大,我无法确定它是否有效。