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
Ihr Backtrace führt sofort zu Ihrem 'User' Modell, speziell in Zeile 13. Zeigen Sie uns 'User'. – davidcelis
hinzugefügt, hoffe es hilft – Karan
'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