2010-03-08 16 views
8

मैं authlogic और authlogic_facebook_connect के साथ विन्यस्त एक आवेदन किया है, लेकिन हर बार जब मैं बटन पर क्लिक करें "कनेक्ट" करने के लिए, मेरे UserSession सत्यापन विफल करते हुए कहाAuthlogic फेसबुक कनेक्ट घपला

Isn "आप प्रमाणन के लिए कोई विवरण प्रदान नहीं किया" ' लॉगिन/पासवर्ड प्रमाणीकरण बाईपास करने के लिए authlogic_facebook_connect t? क्या मुझे कुछ कॉन्फ़िगरेशन चरण याद आ रहा है?

किसी भी मदद की सराहना की जाएगी!

+0

क्या आप इसके साथ कहीं भी गए? – Codebeef

+0

नहीं, जब मैं इसे वापस प्राप्त करता हूं तो मैं http://github.com/kalasWarrior/authlogic_facebook को http://github.com/kalasjocke/authlogic_facebook_connect की बजाय कोशिश करने जा रहा हूं उम्मीद है कि लंबे समय तक बेहतर काम करेगा । – a10s

उत्तर

2

अरे, शायद मैं इस पर मदद कर सकते हैं, बस नहीं बहुत समय पहले इस समस्या थी ...

फेसबुक कनेक्ट पुरानी हो चुकी है। सभी अच्छे बच्चे अब ओएथ के साथ फेसबुक ग्राफ का उपयोग कर रहे हैं। फेसबुक टीम ने फेसबुक कनेक्ट के लिए दस्तावेज भी बंद कर दिया है।

वैसे भी, जो ऑथलॉगिक फेसबुक कनेक्ट के लिए जाता है, यह अब और काम नहीं करता है।

अंत में, मैंने सामान्य लॉगिन और खाता प्रबंधन के लिए एथलॉगिक का उपयोग जारी रखा, लेकिन फेसबुक कनेक्ट के लिए मैंने अपना कोड लिखा।

संभावना है कि आपने फेसबुकर मणि का उपयोग किया हो। उस मणि को अनइंस्टॉल करें, लेकिन config/facebooker.yml फ़ाइल रखें।

इस प्रयास करें: config/initializers/load_config.rb अंदर इस कोड को जोड़कर config/facebooker.yml का उपयोग कर

  1. रखें

    config = YAML.load_file("#{Rails.root}/config/facebooker.yml") || {}

    (आप इस फ़ाइल बनाने की आवश्यकता) facebook_config = config['common'] || {}

    facebook_config.update(config[Rails.env] || {})

    FB_CONFIG = facebook_config.symbolize_keys

  2. अपने user_controller.rb अंदर इस कोड जोड़ें:

 
def facebook_oauth_callback 
    if not params[:code].nil? 
    callback = url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') 
    url = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=#{callback}&client_secret=#{FB_CONFIG[:secret_key]}&code=#{CGI::escape(params[:code])}") 
    http = Net::HTTP.new(url.host, url.port) http.use_ssl = (url.scheme == 'https') tmp_url = url.path + "?" + url.query 
    request = Net::HTTP::Get.new(tmp_url) 
    response = http.request(request) 
    data = response.body 
    access_token = data.split("=")[1] 
    if access_token.blank? 
     flash[:notice] = 'An error occurred while connecting through Facebook, please try again later.' 
    else 
     url = URI.parse("https://graph.facebook.com/me?access_token=#{CGI::escape(access_token)}") 
     http = Net::HTTP.new(url.host, url.port) 
     http.use_ssl = (url.scheme == 'https') 
     tmp_url = url.path + "?" + url.query 
     request = Net::HTTP::Get.new(tmp_url) 
     response = http.request(request) 
     user_data = response.body 
     user_data_obj = JSON.parse(user_data) 
     @user = User.new_or_find_by_facebook_oauth_access_token(access_token, {:user_data => user_data_obj}) 

     if @user.new_record? 
     session[:user] = @user 
     session[:external_app] = "Facebook" 
     redirect_to(:action => 'new_details') 
     else 
     user_session = UserSession.create(@user) 
     flash[:notice] = "Successfully logged in." 
     redirect_back_or_default root_url 
     end 
    end 
    end 
end 

def create_facebook 
    redirect_to("https://graph.facebook.com/oauth/authorize?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=" + 
    url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') + 
    "&scope=email,offline_access") 
end 
  1. अपने प्रयोक्ता मॉडल (एप्लिकेशन/मॉडल/उपयोगकर्ता के अंदर खोजने विधि जोड़ें।rb):
 
     def self.new_or_find_by_facebook_oauth_access_token(access_token, options = {}) 
     user = User.find_by_facebook_oauth_access_token(access_token) 
     if user.blank? 
      #code to create new user here 
     end 
     user 
     end 
  1. तरह

    <%= link_to image_tag('gallery/button-facebook.png', :title => "register with Facebook", :alt => "register with Facebook"), {:action => 'create_facebook'}, {:target => '_parent'} %>

स्पष्टीकरण कुछ ध्यान में रखते हुए कार्रवाई create_facebook के लिए लिंक जोड़ें,

  1. पहले चरण में आपने facebooker.yml
  2. से कॉन्फ़िगर डेटा प्राप्त करने के लिए एक फ़ाइल बनाई है, दूसरे चरण में, आपने मूल रूप से दो फ़ंक्शन बनाए, एक उपयोगकर्ता को फेसबुक साइट (create_facebook) और अन्य को कॉलबैक डेटा कैप्चर करने के लिए (facebook_oauth_callback) विचार इस पृष्ठ से था: http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
  3. तीसरे चरण में, आपने उपयोगकर्ता मॉडल के अंदर एक विधि जोड़ दी है, या नहीं मिला है, जो उपयोगकर्ता नहीं मिला है, उपयोगकर्ता द्वारा वापस दी गई जानकारी के आधार पर उपयोगकर्ता।

कोड केवल मेरे प्रोजेक्ट पर काम करता है, न केवल इसे कॉपी-पेस्ट करें बल्कि इसे लाइन-बाय-लाइन सीखें। समय के साथ मुझे एहसास हुआ कि सरल कोड का उपयोग करना बेहतर है जिसे आप समझ सकते हैं कि आप अन्य जटिल प्लगइन का उपयोग करने के बजाय समझ सकते हैं, जब आप चीजें खराब हो जाते हैं तो आप ठीक नहीं कर सकते ...

+0

धन्यवाद जैकोड, मैं अब OAuth2 का उपयोग कर रहा हूं, जिसने मुझे कोई भी परेशानी नहीं दी। – a10s

+0

कोई चिंता नहीं, खुशी हुई यह काम किया :) – jaycode

0

मैं इस समस्या थी, मुझे लगता है कि मेरी समस्या

<%= authlogic_facebook_login_button :controller => 'account', :js => :jquery %> 

टिप्पणी मैं नियंत्रक में पारित करने के लिए किया था करने के लिए अपने कॉल में शामिल था। मुझे लगता है कि यह मेरा समाधान था वैसे भी, अब लाइन के नीचे एक और समस्या मारा जहां मैं फेसबुक के साथ ठीक प्रमाणित कर रहा हूं, लेकिन यह हर बार मेरी साइट पर एक नया उपयोगकर्ता बना रहा है।

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