我正在使用基於Rails的API。我最近開始試圖對其進行版本化。 (我使用Versionist寶石,萬一它很重要)一個版本('v2')使用Devise和Omniauth通過Facebook/Twitter對用戶進行身份驗證。設置設計omniauth_path_prefix不起作用
我想與此版本相關的所有路由具有相應版本的前綴(所以users/:username/foo
變得v2/users/:username/foo
等),但我已經發現,把devise_for
的api_version
塊內防止設計助手(current_user
, user_signed_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
一切似乎都很大......除了制定產生omniauth路線:
耙路輸出:
user_omniauth_authorize /auth/:provider(.:format)
user_omniauth_callback /auth/:action/callback(.:format)
現在,一些谷歌福透露,有有一項配置設置,這一點,所以我增加了以下對我們的色器件初始化(config/initializers/devise.rb
):
Devise.setup do |config|
config.omniauth_path_prefix = 'v2/auth'
end
現在,耙路線產生看起來明智的路徑:
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:(?!))
然而,當我ATTE MPT調用api.localhost/v2/auth/facebook
訪問這條路,我得到一個路由錯誤:
ActionController::RoutingError (No route matches [GET] "/v2/auth/facebook")
任何想法是怎麼回事?
感謝您的回答。不幸的是,在過去的十個月裏,這個項目已經發生了很大的變化,我無法確定它是否有效。 – MrTheWalrus