rails google ruby-on-rails facebook devise ruby-on-rails-3.2 omniauth

ruby on rails - google - Error de enrutamiento constante no inicializado Usuarios



rails devise google (2)

Soy un novato en los carriles ... Estoy intentando configurar Iniciar sesión en Facebook para una aplicación de demostración. Estoy usando OmniAuth y siguiendo este tutorial

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Me aparece este error al redireccionar a fB:

Routing Error: uninitialized constant Users Try running rake routes for more information on available routes.

Ambiente

Windows 7 Rails version :3.2.9.rc2 omniauth-1.1.1 devise-2.1.2

My routes.rb se ve así:

root :to => ''static_pages#home'' resources :users get "static_pages/home" match ''/auth/facebook'' => ''omniauth#passthru'' match ''/users/auth/facebook'' => ''users/omniauth_callbacks#passthru'' devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } , :strategy_class => OmniAuth::Strategies::Facebook

devise.rb contiene:

require ''devise/orm/active_record'' require ''omniauth-facebook'' config.omniauth_path_prefix = "/users/auth" config.omniauth :facebook, "ABC", "XYZ",{:client_options => { :ssl => { :verify => false } }}

Y OmniAuthController contiene: es decir, aplicaciones / controladores / omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook # You need to implement the method below in your model (e.g. app/models/user.rb) @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) if @user.persisted? sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? else session["devise.facebook_data"] = request.env["omniauth.auth"] #redirect_to new_user_registration_url redirect_to "static_pages_home" end end def passthru render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false # Or alternatively, # raise ActionController::RoutingError.new(''Not Found'') end end

El modelo User.rb contiene:

class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me attr_accessible :date_of_birth, :firstName, :lastName, :mailId, :phone, :provider, :uid devise :omniauthable protected def self.find_for_facebook_oauth(auth, signed_in_resource=nil) user = User.find(:provider => auth.provider, :uid => auth.uid).first unless user user = User.create(name:auth.extra.raw_info.name, provider:auth.provider, uid:auth.uid, email:auth.info.email, password:Devise.friendly_token[0,20] ) end user end def self.new_with_session(params, session) super.tap do |user| if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] user.email = data["email"] if user.email.blank? end end end end

Rastro:

Comenzó GET "/ users / auth / facebook" para 127.0.0.1 en 2012-11-23 22:39:32 -0800 (facebook) Se inició la fase de devolución de llamada.

Comenzó GET "/ users / auth / facebook / callback?

state=XYZ&code=ABC" for 127.0.0.1 at 2012-11-23 22:39:33 -0800 ActionController::RoutingError (uninitialized constant Users): activesupport (3.2.9.rc2) lib/active_support/inflector/methods.rb:230:in `block in constantize'' activesupport (3.2.9.rc2) lib/active_support/inflector/methods.rb:229:in `each'' activesupport (3.2.9.rc2) lib/active_support/inflector/methods.rb:229:in `constantize'' actionpack (3.2.9.rc2) lib/action_dispatch/routing/route_set.rb:69:in `controller_reference'' actionpack (3.2.9.rc2) lib/action_dispatch/routing/route_set.rb:54:in `controller'' actionpack (3.2.9.rc2) lib/action_dispatch/routing/route_set.rb:32:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/routing/mapper.rb:42:in `call'' journey (1.0.4) lib/journey/router.rb:68:in `block in call'' journey (1.0.4) lib/journey/router.rb:56:in `each'' journey (1.0.4) lib/journey/router.rb:56:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/routing/route_set.rb:600:in `call'' omniauth (1.1.1) lib/omniauth/strategy.rb:394:in `call_app!'' omniauth (1.1.1) lib/omniauth/strategy.rb:356:in `callback_phase'' omniauth-oauth2 (1.1.1) lib/omniauth/strategies/oauth2.rb:77:in `callback_phase'' omniauth (1.1.1) lib/omniauth/strategy.rb:219:in `callback_call'' omniauth (1.1.1) lib/omniauth/strategy.rb:175:in `call!'' omniauth (1.1.1) lib/omniauth/strategy.rb:157:in `call'' warden (1.2.1) lib/warden/manager.rb:35:in `block in call'' warden (1.2.1) lib/warden/manager.rb:34:in `catch'' warden (1.2.1) lib/warden/manager.rb:34:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'' rack (1.4.1) lib/rack/etag.rb:23:in `call'' rack (1.4.1) lib/rack/conditionalget.rb:25:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/head.rb:14:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/params_parser.rb:21:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/flash.rb:242:in `call'' rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'' rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/cookies.rb:341:in `call'' activerecord (3.2.9.rc2) lib/active_record/query_cache.rb:64:in `call'' activerecord (3.2.9.rc2) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'' activesupport (3.2.9.rc2) lib/active_support/callbacks.rb:405:in `_run__959081092__call__942932381__callbacks'' activesupport (3.2.9.rc2) lib/active_support/callbacks.rb:405:in `__run_callback'' activesupport (3.2.9.rc2) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'' activesupport (3.2.9.rc2) lib/active_support/callbacks.rb:81:in `run_callbacks'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/callbacks.rb:27:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/reloader.rb:65:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'' railties (3.2.9.rc2) lib/rails/rack/logger.rb:32:in `call_app'' railties (3.2.9.rc2) lib/rails/rack/logger.rb:16:in `block in call'' activesupport (3.2.9.rc2) lib/active_support/tagged_logging.rb:22:in `tagged'' railties (3.2.9.rc2) lib/rails/rack/logger.rb:16:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/request_id.rb:22:in `call'' rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'' rack (1.4.1) lib/rack/runtime.rb:17:in `call'' activesupport (3.2.9.rc2) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' rack (1.4.1) lib/rack/lock.rb:15:in `call'' actionpack (3.2.9.rc2) lib/action_dispatch/middleware/static.rb:62:in `call'' railties (3.2.9.rc2) lib/rails/engine.rb:479:in `call'' railties (3.2.9.rc2) lib/rails/application.rb:223:in `call'' rack (1.4.1) lib/rack/content_length.rb:14:in `call'' railties (3.2.9.rc2) lib/rails/rack/log_tailer.rb:17:in `call'' rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'' Rendered c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.9.rc2/lib/action_dispatch/middleware/templates/rescues/ ing_error.erb within rescues/layout (0.0ms)


Creo que esa parte está estropeando:

match ''/users/auth/facebook'' => ''users/omniauth_callbacks#passthru''

Pequeña prueba, para ti:

poner en su punto de vista:

<%= link_to users_auth_facebook_path, users_auth_facebook_path %>

y seguirlo con un clic, también da el mismo error ...

Creo que deberías usar algo como (lo que se menciona en el wiki que has vinculado anteriormente):

devise_scope :user do get ''/users/auth/:provider'' => ''users/omniauth_callbacks#passthru'' end

Y ajuste el método passthru para delegar la acción al método privado / protegido apropiado según el valor de params [: provider]

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def passthru send(params[:provider]) if providers.include?(params[:provider]) end protected def facebook raise "Implement me for facebook" end def twitter raise "Implement me for twitter" end private def providers ["facebook", "twitter"] end end


mv

app / controllers / omniauth_callbacks_controller.rb

a

app / controladores / usuarios / omniauth_callbacks_controller.rb

o cambio

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

a

class OmniauthCallbacksController < Devise::OmniauthCallbacksController