2012-04-06 7 views
0

Ich habe meine Haare aus diesem Grund gezogen.Versuchen, Gurke mit OmniAuth arbeiten

Mein Gurkenschritt klickt auf ein Login für Facebook. Ich habe durch Befolgen der folgenden Artikel verspottet omniauth:

http://pivotallabs.com/users/mgehard/blog/articles/1595-testing-omniauth-based-login-via-cucumber

Mein omniauth_callbacks_controller.rb hat den folgenden Code:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 

    def my_logger 
    @@my_logger = Logger.new("#{Rails.root}/log/my.log") 
    end 


    def facebook 
    @user = User.find_for_facebook_oauth(env["omniauth.auth"], current_user) 

    if @user.persisted? 
     flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
     sign_in_and_redirect @user, :event => :authentication 
    else 
     session["devise.facebook_data"] = env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
    end 
end 

ich jedoch erhalten folgende Fehlermeldung:

When I follow "facebook_login_button"   # features/step_definitions/basic.rb:14 
     undefined method `extra' for #<Hash:0x007fda6d7cd950> (NoMethodError) 
     ./app/models/user.rb:13:in `find_for_facebook_oauth' 
     ./app/controllers/users/omniauth_callbacks_controller.rb:8:in `facebook' 
     (eval):2:in `click_link' 
     ./features/step_definitions/basic.rb:15:in `/^(?:|I)follow "([^"]*)"$/' 
     features/homepage.feature:30:in `When I follow "facebook_login_button"' 

Andere Artikel, die ich gelesen habe: Devise 1.5 + Omniauth 1.0 + Facebook: undefined method `extra` - Problem: Dies ist Omniauth verspotten mit Rspec I t Hink - nicht sicher, ob es für Gurken angewendet werden kann

https://github.com/intridea/omniauth/issues/558 --post von benjamintanweihao arbeitet - aber seine Hacker den Code anders mit Tests zu arbeiten - die git Zweige vorgeschlagen entweder

EDIT arbeiten nicht: my Modell/user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :lockable, :timeoutable, :confirmable and :activatable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    devise :omniauthable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    def self.find_for_facebook_oauth(access_token, signed_in_resource=nil) 
      data = access_token.extra.raw_info 
      if user = User.where(:email => data.email).first 
       user 
      else 
       User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) 
      end 
    end 
end 
+0

Ihr Backtrace führt sofort zu Ihrem 'User' Modell, speziell in Zeile 13. Zeigen Sie uns 'User'. – davidcelis

+0

hinzugefügt, hoffe es hilft – Karan

+0

'access_token' ist ein Hash, weshalb Sie diesen Fehler bekommen. Hash hat keine extra Methode. Ich würde vorschlagen, dass Sie es sich ansehen und genau sehen, womit Sie es zu tun haben und verwenden Sie den Hash entsprechend – davidcelis

Antwort

1

Diese hapens aufgrund dieses Problem zu tun: https://github.com/intridea/omniauth/issues/558 es ist nicht deine Schuld, es ist ein kleiner Fehler in omniauth. Sie können Methoden wie access_token.extra im Produktions- und Entwicklungsmodus verwenden, aber damit es im Testmodus funktioniert, sollten Sie es in access_token ["extra"] ändern