2014-11-08 12 views
6

मैं फेसबुक जावास्क्रिप्ट एसडीके के साथ अपनी वेबसाइट में फेसबुक लॉगिन को एकीकृत करने की कोशिश कर रहा हूं। फेसबुक डेवलपर दस्तावेज़ here द्वारा प्रदान की चरण दर चरण निर्देश के अनुसार, यहां परीक्षण कोड मैंने लिखा है:FB.logLoginStatus पॉपअप विंडो के अंदर FB.login अवरुद्ध

<script> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '{$MY_APP_ID}', 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true, // parse social plugins on this page 
     version : 'v2.1', // use version 2.1 
     status  : true, // check FB login status 
    }); 
}; 

function fblogin() { 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
     alert('Logged in.'); 
     } 
     else { 
     FB.login(); 
     } 
    }, true); 
} 
</script> 
<button onclick="fblogin()">login</button> 
<script src="//connect.facebook.net/en_US/sdk.js"></script> 

क्षमा करें, वेबसाइट डोमेन के प्रतिबंध के कारण, मैं इस बेला के लिए नहीं ले सकते। लेकिन मैंने अपने डोमेन पर कोशिश की, फेसबुक लॉगिन विंडो क्रोम और फ़ायरफ़ॉक्स में पॉपअप की गई, लेकिन सफारी द्वारा अवरुद्ध। यह अजीब तरह का है, क्या फेसबुक डेवलपर दस्तावेज़ द्वारा प्रदान किए गए कोड स्निपेट के लिए कुछ भी गलत है?

+1

यह आम बात है आधुनिक ब्राउज़रों स्वत: ब्लॉक करने के लिए के लिए पॉपअप - स्वचालित अर्थ वे किसी क्लिक की तरह किसी भी उपयोगकर्ता इंटरैक्शन द्वारा ट्रिगर नहीं किए गए थे। उत्तरार्द्ध भी सिफारिश है - क्लिक पर केवल 'FB.login' को कॉल करें। इससे पॉपअप को अवरुद्ध कर दिया जा सकता है। इसके अलावा, यह _choice_ को छोड़ देता है चाहे वे उपयोगकर्ता के हाथों में एफबी के माध्यम से लॉगिन करना चाहते हैं - बस इसे उन पर धक्का देने के बजाय। – CBroe

+0

@CBroe मुझे लगता है कि उपयोगकर्ता इस विकल्प को चुनने से पहले फेसबुक को अपने जावास्क्रिप्ट एसडीके ट्यूटोरियल में इस प्रतिबंध का जिक्र करना चाहिए। बीटीडब्लू, मैंने उपयोगकर्ता क्लिक एक्शन पर केवल उपयोगकर्ता FB.login की कोशिश की है, लेकिन कुछ प्रतिबंध हैं जैसे 'प्राधिकरण कोड का उपयोग किया गया है' त्रुटि होती है जब उपयोगकर्ता दो बार लॉगिन करने का प्रयास करता है। – David

+0

वैसे तो _let_ उन्हें दो बार लॉगिन करने का प्रयास न करें ... 'FB.getLoginStatus' आपको बताता है कि क्या वे पहले से ही पृष्ठ लोड समय पर लॉग इन हैं - और यदि ऐसा है, तो लॉगिन लिंक प्रदर्शित न करें, लेकिन "हैलो {name}" या इसके बजाय कुछ। और मुझे लगता है कि फेसबुक अपने सर्वोत्तम प्रथाओं में कहीं भी उपयोगकर्ता इंटरैक्शन के बिना कॉल के मुद्दे का उल्लेख करता है ... उपरोक्त कोड हालांकि एक छोटा सा उदाहरण है, और यह हर संभव मुद्दे को कवर करने के लिए _examples_ की प्रकृति है। – CBroe

उत्तर

10

जैसा कि हमने पहले ही टिप्पणियों में चर्चा की है, एफबी.लॉगिन को उपयोगकर्ता इंटरैक्शन पर कॉल किया जाना चाहिए, दस्तावेज़ों में उदाहरण सही नहीं है।

यह एक काम कर उदाहरण कैसे एक लॉगिन सही ढंग से करने के लिए, फेसबुक डॉक्स में कई लेख से एक साथ की नकल की होना चाहिए:

<script> 
    //call this on user interaction (click) 
    function doLogin() { 
     FB.login(function(response) { 
      if (response.authResponse) { 
       console.log('Welcome! Fetching your information.... '); 
       FB.api('/me', function(response) { 
        console.log('Good to see you, ' + response.name + '.'); 
       }); 
      } else { 
       console.log('User cancelled login or did not fully authorize.'); 
      } 
     }, {scope: 'email,user_friends'}); 
    } 

    window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'your-app-id', 
      xfbml  : true, 
      version : 'v2.1' 
     }); 

     FB.getLoginStatus(function (response) { 
      if (response.status === 'connected') { 
       // the user is logged in and has authenticated your 
       // app, and response.authResponse supplies 
       // the user's ID, a valid access token, a signed 
       // request, and the time the access token 
       // and signed request each expire 
       var uid = response.authResponse.userID; 
       var accessToken = response.authResponse.accessToken; 
      } else if (response.status === 'not_authorized') { 
       // the user is logged in to Facebook, 
       // but has not authenticated your app 
      } else { 
       // the user isn't logged in to Facebook. 
      } 
     }); 
    }; 

    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 
<button onclick="doLogin()">login</button> 

अधिक स्पष्टीकरण: http://www.devils-heaven.com/facebook-javascript-sdk-login/

+0

क्या यह अभी भी काम करने की संभावना है? प्रतीत होता है कि इस समय मानक असमर्थित ब्राउज़र संदेश प्राप्त हो रहा है। – Dano007

+0

हाँ, मैं हर दिन इसका उपयोग कर रहा हूं। सुनिश्चित नहीं है कि आप किस संदेश के बारे में बात कर रहे हैं? आपको बहुत अधिक विशिष्ट होना चाहिए। – luschn

+0

क्या आपके पास एक उदाहरण साइट है जिसे मैं देख सकता हूं? मैंने ऊपर दिए गए कोड को कॉपी किया है, लेकिन फिर भी त्रुटि प्राप्त करें "असमर्थित ब्राउज़र: आईओएस के लिए Google क्रोम इस सुविधा का समर्थन नहीं करता है। PLease सफारी का उपयोग करें" मैं – Dano007

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