Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 设置designe omniauth_path_前缀不';行不通_Ruby On Rails 3_Devise_Routes_Omniauth - Fatal编程技术网

Ruby on rails 3 设置designe omniauth_path_前缀不';行不通

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\

我正在开发一个基于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\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,修改后的路线似乎有效(我还没有进一步了解是否会出现其他问题).

谢谢你的回答。不幸的是,该项目在过去十个月里变化太大,我无法确定它是否有效。谢谢你的回答。不幸的是,该项目在过去十个月里变化太大,我无法确定它是否有效。