2011-10-03 7 views
6

का उपयोग करके लॉग इन होने के बाद एफबी auth.logout उठाया जा रहा है नोट: हमारा (वेब) एप्लिकेशन ठीक काम कर रहा था जब तक कि हम पिछले सप्ताह के अंत में ओथ 2.0 वर्कफ़्लो में अपग्रेड नहीं किया गया।"सर्वर-साइड-वर्कफ़्लो" (ओएथ 2.0)

जब कोई उपयोगकर्ता हमारे (वेब) एप्लिकेशन में "फेसबुक से कनेक्ट होता है" तो हम उन्हें Facebook Authentication docs में वर्णित "सर्वर-साइड-वर्कफ़्लो" का उपयोग करके फेसबुक में लॉग इन करते हैं।

window.fbAsyncInit = function() { 
    FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true, channelUrl: 'http://XXX/fbchannel.html', oauth: true}); 
    FB.Event.subscribe('auth.logout', function(response) { 
     logout(); 
    }); 
}; 
(function() { 
    var e = document.createElement('script'); 
    e.type = 'text/javascript'; 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}()); 
function logout(){ 
    new Ajax.Request('http://XXX/logout'); 
} 

ऐसा प्रतीत होता है कि जब तक उपयोगकर्ता फेसबुक में लॉग इन किया है, वे लॉग इन नहीं हैं: उपयोगकर्ता हमारे आवेदन जो निम्नलिखित जावास्क्रिप्ट कोड शामिल हैं में अपने मुखपृष्ठ के लिए हो जाता है जब हालांकि, फेसबुक auth.logout घटना बढ़ा रहा है हमारे आवेदन में (यदि आपके पास अपने ब्राउज़र के दूसरे टैब में facebook.com खुला है और हमारे एप्लिकेशन द्वारा लॉग इन होने के बाद पेज को फिर से लोड करें, तो आप देखेंगे कि आप वास्तव में facebook.com में लॉग इन हैं)।

क्या ओएथ 2.0 में कोई अतिरिक्त कदम है जिसे "सर्वर-साइड वर्कफ़्लो" का उपयोग करते समय उपयोगकर्ता को हमारे एप्लिकेशन में लॉग इन करने की आवश्यकता है जो ओएथ के पिछले संस्करण में आवश्यक नहीं था? क्या उपयोगकर्ता को कनेक्ट होने के बाद फेसबुक के माध्यम से स्पष्ट रूप से लॉगिन करना है?

किसी भी मदद की बहुत सराहना की जाएगी।

अग्रिम धन्यवाद, जेसन

PS- ग्राहक के पक्ष प्रवाह के माध्यम से हमारे आवेदन में लॉगिंग (के बाद आप पहले से कनेक्ट किया हुआ है) बस ठीक काम करता है। यह केवल तभी होता है जब सर्वर साइड वर्कफ़्लो के माध्यम से कनेक्ट और लॉग इन किया जाता है, क्या हम ऑटो-लॉगआउट समस्या का अनुभव करते हैं।

+3

मैं अपने auth.logout ईवेंट हैंडलर में FB.getLoginStatus के लिए एक कॉल जोड़ने और प्रतिक्रिया की जाँच करके इस समस्या को दूर करने में सक्षम था authResponse ऑब्जेक्ट के लिए। मुझे नहीं पता कि फेसबुक auth.logout क्यों बढ़ाता है जब FB.getLoginStatus एक authResponse देता है जो इंगित करता है कि उपयोगकर्ता लॉग इन है, लेकिन, ऐसा करता है। तो, यह एक हैक है: FB.Event.subscribe ('auth.logout', फ़ंक्शन (प्रतिक्रिया) { FB.getLoginStatus (फ़ंक्शन (res) { अगर (! Res.authResponse) { लॉगआउट(); } }); }); – Jason

+0

ग्रेट मिल! मुझे आश्चर्य है कि यह अभी भी होता है या अगर फेसबुक ने इसे ठीक कर दिया है ... – DMCS

+0

मैंने आज भी अपने आवेदन में इस व्यवहार को देखना शुरू कर दिया है। मैं तुम्हारे जैसा ही हैक के साथ आया लेकिन मैं इसके साथ थोड़ा असहज हूं। –

उत्तर

0

AJAX पृष्ठों के लिए आपको ब्राउज़र सत्र से uid, access_token, या कोड प्राप्त करने की आवश्यकता है।

यह क्लिकजैक रोकथाम के लिए iframes और AJAX के लिए मानक है, और अन्य सुरक्षा जोखिम। देखें: http://tools.ietf.org/html/rfc6749#section-10.13


त्वरित और गंदी उदाहरण:

<?php 
// be sure to exchange YourAppId, with your app id. 

if(isset([fb_YourAppId_user_id])){ 
$user = [fb_YourAppId_user_id]; 
}else { // no user, send to login flow. } 

if(isset([fb_YourAppId_access_token])){ 
$access_token = [fb_YourAppId_access_token]; 
} else { // no user, send to login flow } 

?>