【问题标题】:Setting Devise omniauth_path_prefix doesn't work设置 Devise omniauth_path_prefix 不起作用
【发布时间】:2012-10-30 18:41:36
【问题描述】:

我正在开发基于 Rails 的 API。我最近开始尝试对其进行版本控制。 (我使用的是Versionist gem,以防万一)一个版本('v2')使用 Devise 和 Omniauth 通过 Facebook/Twitter 对用户进行身份验证。

我希望与此版本关联的所有路由都具有适当的版本前缀(因此 users/:username/foo 变为 v2/users/:username/foo 等),但我已经发现将 devise_for 放在 api_version 块内阻止 Devise 助手(current_useruser_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路由:

rake 路由输出:

 user_omniauth_authorize      /auth/:provider(.:format)
 user_omniauth_callback       /auth/:action/callback(.:format)

现在,一些 google-fu 透露有一个设计配置设置,所以我将以下内容添加到我们的设计初始化程序 (config/initializers/devise.rb):

Devise.setup do |config|
  config.omniauth_path_prefix = 'v2/auth'
end

现在,rake 路由会生成看起来合理的路径:

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")

知道这里发生了什么吗?

【问题讨论】:

    标签: ruby-on-rails-3 devise routes omniauth


    【解决方案1】:

    您在路由中缺少提供者名称,因此它们与/v2/auth/facebook 中的facebook 部分不匹配。正确的路线目的地应该类似于v2/users/omniauth_callbacks#(?-mix:facebook)

    你是否在用户模型中指定了提供者?

    devise_for ..., :omniauthable, :omniauth_providers => [:facebook]
    

    作为记录,我正在使用 Rails 3.2 和 Devise 3.0,并且更改后的路线似乎有效(我还没有进一步查看是否会出现其他问题)。

    【讨论】:

    • 感谢您的回答。不幸的是,在过去的十个月里,这个项目发生了很大的变化,我无法再确定它是否有效。
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2016-08-15
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多