2011-08-26 8 views
8

संपादित करें: यह बग लॉग किया गया था, और Facebook bug के रूप में पुष्टि की गई। अब तय किया गया है!ओएसयूथ 2.0 के साथ नया जेएस एसडीके fbsr_ कुकी में सबडोमेन सहेज रहा है?



मैं नए जे एस एसडीके पर ले जाने के मेरे अपडेट का परीक्षण कर रहा हूँ। मेरा ऐप मेरे डोमेन के कई सबडोमेन में चलता है। वर्ष JDK पर, मैं कुछ इस तरह बुला गया था: नई JDK पर

FB.init({ 
    appId: [APP_ID], 
    status: false, 
    cookie: true, 
    xfbml: true 
}); 
FB.login(); 

, यह इस तरह दिखता है:

FB.init({ 
    appId: [APP_ID], 
    status: false, 
    cookie: true, 
    xfbml: true, 
    oauth:true 
}); 
FB.login(); 

एक कुकी प्रबंधक एफएफ पर जोड़ने का उपयोग करना, आप है कि पुराने देख सकते हैं संस्करण mydomain.com पर एक कुकी सेट करेगा, लेकिन नया इसे www.mydomain.com पर सेट करता है - जिसका अर्थ है कि मेरा अन्य सबडोमेन कुकी तक नहीं पहुंच सकता है।

स्पष्ट करने के लिए: समस्या यह है कि मैं अलग उप डोमेन पर फेसबुक कुकी का उपयोग नहीं कर सकता है, और यह भी अगर मैं उन्हें हर उप डोमेन पर लॉग इन करें, मैं उन्हें हर उपडोमेन भी

+1

मुझे लगता है कि आप इस के लिए एक बग की रिपोर्ट दर्ज करना चाहिए ... http://developers.facebook.com/bugs –

+0

टिम ने सुझाव दिया है कि आपको वास्तव में इसे बग के रूप में रिपोर्ट करने पर विचार करना चाहिए। मैं इस नए व्यवहार की पुष्टि कर सकता हूं और, भले ही यह मेरे किसी भी ऐप को सीधे प्रभावित न करे, यह कम से कम एक अनियंत्रित परिवर्तन है। – MartinodF

+1

यहां एक बग के रूप में लॉग इन किया गया है: https://developers.facebook.com/bugs/256155664428653?browse=search_4e843e6d89a232275456793 – Abby

उत्तर

3

अपडेट: बग फेसबुक द्वारा 'फिक्स्ड' में अपडेट किया गया है। हुर्रे!

यह एक फेसबुक बग है और, लॉग किया गया है reproduced और उच्च प्राथमिकता के रूप यहाँ स्वीकार किए जाते हैं: https://developers.facebook.com/bugs/256155664428653?browse=search_4e843e6d89a232275456793

+0

का उपयोग कर रहा है क्या आपके पास कभी इसके आसपास काम करने के साथ कोई भाग्य है? मुझे एक ही समस्या है। –

+0

मैं कुछ गड़बड़ कर रहा हूं इसके चारों ओर। कुकी का उपयोग करने के बजाय, मैंने अपने सर्वर पर AJAX के माध्यम से ऑथ प्रतिक्रिया सिग और सामग्री भेजी जो उन्हें सत्यापित करता है और सर्वर साइड सत्र का उपयोग करता है। – Abby

+0

था nks! इस तरह कुछ करने की कोशिश करेंगे। –

15

से लॉग आउट करने के आप OAuth सेट करते हैं है Javascript API के माध्यम से FB.init() को कॉल करते समय सत्य होने के लिए, अब आप fbs_APP_ID कुकी के बजाय fbsr_APP_ID कुकी प्राप्त करें ("आर" देखें)। इसमें एक हस्ताक्षरित अनुरोध और ओथ माइग्रेशन का हिस्सा शामिल है।

यदि आप PHP एसडीके का उपयोग करते हैं, तो इसे परिवर्तन का ख्याल रखना चाहिए।

हालांकि, वेबसाइटों के लिए डॉक्स एक नया get_facebook_cookie() फ़ंक्शन के साथ अद्यतन किया प्रतीत नहीं होते हैं: https://developers.facebook.com/docs/guides/web/

यह अभी भी पुरानी कुकी प्रारूप का उपयोग करता।

http://developers.facebook.com/docs/authentication/signed_request/

उसके बाद, आप डॉक्स यहाँ के माध्यम से एक ACCESS_TOKEN में कुकी में "कोड" पैरामीटर चालू करने की आवश्यकता:: आप कैसे हस्ताक्षरित अनुरोध यहाँ पार्स करने के लिए मिल सकता है developers.facebook.com/docs/प्रमाणीकरण/(StackOverflow स्पैम रोकथाम के कारण कोई http: //)

मैंने नए PHP एसडीके के स्रोत में इसे खोने के लिए थोड़ा सा खोला क्योंकि सभी दस्तावेज अपडेट नहीं होने लगते हैं।

मैं जो पूर्ण कोड उपयोग कर रहा हूं वह उपरोक्त का संयोजन है जो पुराने या नए कुकी प्रारूप के साथ काम करने के लिए थोड़ा अतिरिक्त संशोधन के साथ है। नया get_facebook_cookie() फ़ंक्शन कुछ अतिरिक्त सरणी तत्व (एल्गोरिदम, कोड, iss_at, user_id) देता है और कुछ सरणी तत्व अब सेट नहीं होते हैं (base_domain, secret, session_key, sig)। प्राथमिक मापदंडों ज्यादातर लोगों के लिए देख रहे हैं सबसे अधिक संभावना है, हालांकि (यूआईडी, ACCESS_TOKEN, और समाप्त हो जाएगा) स्थापित कर रहे हैं

function get_facebook_cookie($app_id, $app_secret) { 
    if ($_COOKIE['fbsr_' . $app_id] != '') { 
     return get_new_facebook_cookie($app_id, $app_secret); 
    } else { 
     return get_old_facebook_cookie($app_id, $app_secret); 
    } 
} 

function get_old_facebook_cookie($app_id, $app_secret) { 
    $args = array(); 
    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
     if ($key != 'sig') { 
      $payload .= $key . '=' . $value; 
     } 
    } 
    if (md5($payload . $app_secret) != $args['sig']) { 
     return array(); 
    } 
    return $args; 
} 

function get_new_facebook_cookie($app_id, $app_secret) { 
    $signed_request = parse_signed_request($_COOKIE['fbsr_' . $app_id], $app_secret); 
    // $signed_request should now have most of the old elements 
    $signed_request[uid] = $signed_request[user_id]; // for compatibility 
    if (!is_null($signed_request)) { 
     // the cookie is valid/signed correctly 
     // lets change "code" into an "access_token" 
     $access_token_response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=$app_id&redirect_uri=&client_secret=$app_secret&code=$signed_request[code]"); 
     parse_str($access_token_response); 
     $signed_request[access_token] = $access_token; 
     $signed_request[expires] = time() + $expires; 
    } 
    return $signed_request; 
} 
+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद। मैं oauth का उपयोग करके नए व्यवहार से खुश हूं: सच है, लेकिन मेरा प्रश्न नई कुकी का उपयोग करने के बजाय मेजबान/सबडोमेन मुद्दे के बारे में है। कुकी को www.domain.com के मेजबान के साथ सेट किया जा रहा है लेकिन मुझे इसे subdomain.domain.com पर सर्वर पर पढ़ने की जरूरत है और यह यहां उपलब्ध नहीं है। पुरानी कुकी के पास www.domain.com – Abby

+0

की मेजबानी के बजाय डोमेन.com का डोमेन था। मेरी इच्छा है कि यह कुछ किया जाएगा .net C# –

0

1) अपने अनुप्रयोग की जाँच करें। सेटिंग्स में डोमेन mydomain.com के रूप में सेट है और www.mydomain नहीं।कॉम
2) init में चैनल फ़ाइल और यूआरएल का उपयोग करें:

FB.init({ 
appId : [APP_ID], 
status : false, 
cookie : true, 
xfbml : true, 
channelUrl : document.location.protocol + "//domain.com/xd_receiver.html", 
oauth : true 
}); 

https://developers.facebook.com/docs/reference/javascript/FB.init/

आशा है कि यह मदद करता है

+0

निश्चित रूप से सेटिंग्स में mydomain.com का उपयोग कर रहा है। मैंने अतीत में चैनलुरल का उपयोग करने की कोशिश की है लेकिन कभी भी बहुत भाग्य नहीं था। मैं फिर से कोशिश करूंगा और देख सकता हूं कि यह कैसा चल रहा है। धन्यवाद – Abby

+0

मैंने एक चैनल यूआरएल जोड़ने की कोशिश की और कुकी में अभी भी सबडोमेन निर्दिष्ट करने वाला एक मेजबान है :( – Abby

0

बाहर की जांच अनुप्रयोग डोमेन में इस https://developers.facebook.com/apps/<appid>/सारांश

नज़र: "मूल जानकारी:"
का हिस्सा यदि आप "www.example.com" निर्दिष्ट करते हैं तो यह ऑनल होगा www.example.com के लिए y काम। यदि आप "example.com" का उपयोग करते हैं तो यह * .example.com के रूप में व्यवहार करेगा और सभी सबडोमेन के लिए काम करेगा

+0

हाय, मैंने पहले से ही mydomain.com के साथ सेट किया है और यह अभी भी एक मुद्दा है। – Abby

+0

php_value session.cookie_domain .domain.com को बदलने पर विचार करें। अपने php.ini फ़ाइल में अपने रूट डोमेन के सामने अग्रणी "।" नोट करें। मैंने इसका परीक्षण नहीं किया है, लेकिन यह संभावित सफलता का मार्ग है। मुझे बताएं कि यह http://www.php.net कैसे जाता है /manual/en/session.configuration.php#ini.session.cookie-domain – adkatrit

+0

मेरा एकीकरण जावा – Abby

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