2012-12-05 30 views
7

हेरोकू पर होस्ट किए गए ऐप पर devise, omniauth (facebook-omniauth सहित) का उपयोग करके फेसबुक प्रमाणीकरण सेट अप करने का प्रयास कर रहा है। फेसबुक एपीआई काम पर कॉल करें, लेकिन मैं कॉलबैक के बाद पुष्टिकरण चरण को छोड़ने का प्रबंधन नहीं करता हूं।अपरिभाषित विधि skip_confirmation! - devise, omniauth

मैं omniauth पर GitHub ट्यूटोरियल का पालन किया: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

और भी पढ़ सकते हैं और इसे लागू करने की कोशिश की: Devise skip_confirmation! not working

लेकिन मैं अपने Heroku लॉग में निम्न त्रुटि मिलती रहती है:

NoMethodError (undefined method `skip_confirmation!') 

यहां मेरा devise.rb दिखता है:

config.omniauth :facebook, "API_KEY", "API_SECRET"  

{:strategy_class => OmniAuth::Strategies::Facebook, 
:scope => 'email, offline_access', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}} 
,210

यहाँ मेरी omniauth_callbacks_controller.rb है:

def self.find_for_facebook_oauth(auth, signed_in_resource=nil) 
user = User.where(:provider => auth.provider, :uid => auth.uid).first 
unless user 
     user = User.new(name:auth.extra.raw_info.name, 
        provider:auth.provider, 
        uid:auth.uid, 
        email:auth.info.email, 
        password:Devise.friendly_token[0,20], 
        ) 
     user.skip_confirmation! 
     user.save 
    end 
    user 
end 

आपकी मदद के लिए धन्यवाद:

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 
    end 
    end 
end 

यहाँ मेरी user.rb मॉडल है!

+0

क्या आपके पास उपयोगकर्ता पर पुष्टिकरण मॉड्यूल है? वर्ग उपयोगकर्ता rorra

+0

मैं इस है: __devise: database_authenticatable,: registerable ,:, वसूली: rememberable,: ट्रैक करने योग्य,: validatable,: omniauthable__ –

उत्तर

16

तो अगर मैं सही (% नहीं 100 सुरक्षित), आप अपने मॉडल मॉड्यूल confirmable है कि घोषणा करने के लिए की जरूरत है हूँ, confirmable मॉड्यूल जोड़ें:

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :confirmable 

और सुनिश्चित करें कि आप के लिए खेतों है कि बनाने के आपके उपयोगकर्ता तालिका पर पुष्टिकरण मॉड्यूल, आपके पास फ़ील्ड पुष्टिकरण_टोकन होना चाहिए और पुष्टि_at

यदि आपके पास फ़ील्ड नहीं हैं, तो उन्हें answer पर कैसे जोड़ें, इसे जांचें।

+0

हाँ बहुत बहुत शुक्रिया, मैं इसे याद किया! मैं __confirmable__ user.rb कहा, __rails भाग गया जी प्रवास add_confirmable_to_devise__ और रेक db: विस्थापित अब मैं NoMethodError मिल (अपरिभाषित विधि 'is_navigational_format '?) OmniauthCallbacksController पर। मुझे पता लगाना क्यों है! –

+0

शायद यह आपके कोड का हिस्सा है, if_navigational_format? तैयार करने का हिस्सा नहीं है। – rorra

+0

कोड के उस हिस्से में, जहां आपके पास set_flash_message है, मैं आमतौर पर इस तरह कुछ उपयोग करता हूं: फ़्लैश [: नोटिस] = I18n.t "devise.omniauth_callbacks.success",: kind => "Linkedin"; साइन_इन (@user); redirect_toign_in_path_for (@user) – rorra