2012-10-16 13 views
5

के बाद current_user nil हमारे पास रेल, devise, और omniauth का उपयोग कर फेसबुक के माध्यम से पंजीकरण और लॉगिन है। हम दो वेब dynos चल रहा है, Heroku पर होस्ट किया गया है।devise + omniauth facebook: sign_in

कभी-कभी फेसबुक के साथ लॉगिन विफल हो रहा है। हमारे ऐप और फेसबुक के बीच वास्तविक हैंडशेक ठीक है। असल में, @user के नीचे दिए गए कोड में एक वास्तविक उपयोगकर्ता मॉडल उदाहरण है, ओमनीथ डेटा हैश में एफबी से सभी डेटा शामिल हैं, साइन_इन सफल लगता है और current_user सेट है।

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
    @user = User.find_for_facebook(env["omniauth.auth"].extra.raw_info, current_user) 

    logger.info ">>>>>> OMNIAUTH FB BEGIN >>>>>>" 
    logger.info env["omniauth.auth"].inspect 
    logger.info "User is: #{@user.inspect}" 

    session["devise.facebook_data"] = request.env["omniauth.auth"].except("extra") 

    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
    res = sign_in(:user, @user) 

    logger.info "Sign In Result: #{res.inspect}" 
    logger.info "CURRENT_USER: #{current_user.inspect}" 
    logger.info "<<<<<< OMNIAUTH FB END <<<<<<" 

    respond_to do |format| 
     format.json 
    end 
    end 
end 

क्लाइंट-साइड सफल लॉगिन पर हमारी साइट पर किसी अन्य URL पर रीडायरेक्ट (लॉगिन संदर्भ के आधार पर अलग-अलग क्रियाएं) करता है। उस यूआरएल पर, हम current_user की जांच करते हैं ... लेकिन current_user शून्य लौट रहा है। अगर लॉगिन प्रक्रिया को दो बार दोहराया जाता है, तो अंततः यह काम करता है।

हम पर

  • रेल 3.2
  • वसीयत 2.1.2
  • Omniauth-फेसबुक 1.4.0
  • रूबी 1.9.3 p194
+0

एक बहुत ही समान समस्या मिली (मेरा वर्तमान_user हमेशा शून्य है)। कुछ लोग फर्जी सुरक्षा को बदलने का सुझाव देते हैं, यहां एक नज़र डालें: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#google – chrmod

+0

कृपया अपने उपयोगकर्ता मॉड्यूल से अपनी find_for_facebook परिभाषा पोस्ट करें। – xvidun

+0

यह एक अच्छा ट्यूटोरियल है: http://sreeharikmarar.blogspot.com/2013/01/omniauth-devise-authentication-using.html – duykhoa

उत्तर

-2

मुझे नहीं पता पता है कि यह वास्तव में आपके द्वारा वर्णित किए गए समाधान का समाधान है, लेकिन मुझे आश्चर्य है कि यह:

@user = User.find_for_facebook (env [ "omniauth.auth"]। Extra.raw_info, current_user)

इस रूप में पढ़ा जाना चाहिए?

@user = User.find_for_facebook (request.env [ "omniauth.auth"]। Extra.raw_info, current_user)

कि कैसे मेरा वैसे भी है। वास्तव में यह सुनिश्चित नहीं है कि यह बताएगा कि आपका ऐप मनमाने ढंग से उपयोगकर्ता को साइन इन क्यों कर रहा है।

संबंधित मुद्दे