【问题标题】:Devise Routing Error on Gem Update (Rails 3, Devise + Omniauth)Gem 更新时设计路由错误(Rails 3,Devise + Omniauth)
【发布时间】:2011-09-30 20:57:03
【问题描述】:

我正在使用 Devise + Omniauth (Facebook),最近更新了我的 gems(Rails 3.0.5、Ruby 1.9.2)。在启动我的应用服务器时,routes.rb 中的以下行:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" }

已开始引发以下错误:

/Users/myname/.rvm/gems/ruby-1.9.2-p0/gems/rack-mount-0.6.14/lib/rack/mount/route_set.rb:62:in `add_route': conditions may only include [:auth_type, :gateway_interface, :path_translated, :remote_host, :remote_ident, :remote_user, :remote_addr, :server_name, :server_protocol, :accept, :accept_charset, :accept_encoding, :accept_language, :cache_control, :from, :negotiate, :pragma, :key?, :request_method, :request_method_symbol, :method, :method_symbol, :get?, :post?, :put?, :delete?, :head?, :headers, :fullpath, :forgery_whitelisted?, :forgery_whitelisted_with_deprecation?, :forgery_whitelisted_without_deprecation?, :media_type, :content_length, :xml_http_request?, :xhr?, :ip, :remote_ip, :server_software, :raw_post, :body, :form_data?, :body_stream, :reset_session, :session=, :session_options=, :GET, :query_parameters, :POST, :request_parameters, :authorization, :local?, :cookie_jar, :flash, :url, :scheme, :protocol, :ssl?, :raw_host_with_port, :host, :host_with_port, :port, :standard_port, :standard_port?, :port_string, :server_port, :domain, :subdomains, :subdomain, :request_uri, :filtered_parameters, :filtered_env, :parameters, :params, :path_parameters=, :symbolized_path_parameters, :path_parameters, :content_mime_type, :content_type, :accepts, :format, :formats, :format=, :negotiate_mime, :if_modified_since, :if_none_match, :not_modified?, :etag_matches?, :fresh?, :env, :script_name, :path_info, :query_string, :session, :session_options, :logger, :media_type_params, :content_charset, :script_name=, :path_info=, :options?, :trace?, :parseable_data?, :[], :[]=, :values_at, :referer, :referrer, :user_agent, :cookies, :path, :location, :taguri=, :taguri, :to_yaml_style, :to_yaml_properties, :syck_to_yaml, :to_yaml, :blank?, :present?, :presence, :duplicable?, :acts_like?, :try, :html_safe?, :to_json, :instance_values, :instance_variable_names, :copy_instance_variables_from, :as_json, :with_options, :to_param, :to_query, :friendly_id?, :unfriendly_id?, :to_html, :dclone, :`, :returning, :require_or_load, :require_dependency, :require_association, :load_dependency, :load, :require, :unloadable, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :public_method, :define_singleton_method, :__id__, :object_id, :to_enum, :enum_for, :gem, :silence_warnings, :enable_warnings, :with_warnings, :silence_stderr, :silence_stream, :suppress, :class_eval, :suppress_warnings, :require_library_or_gem, :debugger, :breakpoint, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__] (ArgumentError)

以这种方式命名的路由是否有新的 a 语法?

【问题讨论】:

  • 我通过恢复到 rails 3.0.3 暂时解决了这个问题
  • 我目前在 3.0.7 上遇到这个问题。只是给任何试图诊断的人的注释:当模型为 :omniauthable 时,即使没有传递给 do devise_for 的其他选项,我也会收到此错误:users

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


【解决方案1】:

您可以通过将 devise-1.4.2/lib/devise/rails/routes.rb 中的第 338 行更改为:

match "#{path_prefix}/:action/callback", #:action => Regexp.union(mapping.to.omniauth_providers.map(&:to_s)),

请注意,这只是一个丑陋的 hack,而不是问题的最终解决方案!

确保你已经设置

devise :omniauthable, :omniauth_providers => [:twitter]

在您的设计模型中(例如用户)。

【讨论】:

  • @norm 你有解决这个问题的方法吗,不是在最近的设计中修补了吗?
【解决方案2】:

如果您将它与 Devise/Omniauth 一起使用,请升级到 forgery-0.4.0。我们正在扩展一些基本的 ruby​​ 类(我知道这总是一个好主意),这在某种程度上导致了 Devise 的问题。 0.4.0 版不再扩展任何 ruby​​ 基类,并且应该完全安全地包含在内。如果您有任何问题,请通过http://github.com/sevenwire/forgery 告诉我们。谢谢!

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2016-07-08
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多