2016-05-14 11 views
0

Ich habe eine Webanwendung erstellt und die Facebook Javascript sdk (Login-Schaltfläche) verwendet.Facebook Javascript sdk: Benutzer muss eingeloggt sein

Facebook Javascript SDK

Ich versuche, das nächste, was zu tun ist:

Ein Benutzer einige Bilder in meiner Seite bewerten können, und einen Kommentar für einige Bilder schreiben.

Ich möchte überprüfen, dass er in Facebook angemeldet ist, bevor er einen Kommentar bewertet und schreibt. Wenn nicht, zeigen Sie ein Popup von Login.

Dies ist der Login-Button:

<fb:login-button scope="public_profile,email,user_friends" 
         onlogin="checkLoginState();" style="display:block;"> 
</fb:login-button> 

Und das ist die js:

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '<myAppId>', 
     cookie: true, // enable cookies to allow the server to access the session 
     xfbml: true, // parse social plugins on this page 
     status: false, 
     oauth: true, 
     version: 'v2.5' // use graph api version 2.5 
    }); 

    function checkLoginState(callback) { 
     FB.getLoginStatus(
      function (response) { 
       statusChangeCallback(response, callback); 
      } 
     ); 
    } 

    function statusChangeCallback(response, callback) { 
     console.log('statusChangeCallback: ' + response.status); 

     if (response.status === 'connected') { 
      // Logged into your app and Facebook. 
      if (callback) callback(); 
      window.accessToken = response.authResponse.accessToken; 
      //testAPI(); 
     } else if (response.status === 'not_authorized') { 
      // The person is logged into Facebook, but not your app. 
      document.getElementById('status').innerHTML = 'Please log ' + 
       'into this app.'; 
     } else { 
      // The person is not logged into Facebook, so we're not sure if 
      // they are logged into this app or not. 
      document.getElementById('status').innerHTML = 'Please log ' + 
       'into Facebook.'; 
     } 
    }  

    FB.getLoginStatus(function (response) { 
     statusChangeCallback(response); 
    }, true); 
}; 

// Load the SDK asynchronously 
(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')); 

ich diese Ereignisse an den fbAsyncInit hinzufügen dachte:

FB.Event.subscribe('auth.statusChange', function (response) { 
     console.log('auth.statusChange: ' + response.status); 
     if (response.status === 'connected') { 
      //the user is logged and has granted permissions 
     } else if (response.status === 'not_authorized') { 
      //ask for permissions 
     } else { 
      //ask the user to login to facebook 
     } 
    }); 

    FB.Event.subscribe('auth.login', function (response) { 
     console.log('auth.login'); 
     //window.location.reload(); 
    }); 
    FB.Event.subscribe('auth.logout', function (response) { 
     console.log('auth.logout'); 
     //window.location.reload(); 
    }); 

Aber dieser Fall funktioniert nicht:

1) Meine App ist geöffnet (und der Benutzer ist nicht angemeldet).

2) Er öffnet Facebook-Seite in einem anderen Tab und er ist bei Facebook eingeloggt.

3) Die Ereignisse werden nicht ausgelöst. (Das gleiche Problem tritt auf, wenn der Benutzer sich von Facebook abgemeldet hat).

Zusätzlich habe ich versucht, fbsr_ zu verwenden, aber dieser Cookie wird nicht erstellt, wenn der Benutzer die obigen Schritte ausführt.

Jede Hilfe wird geschätzt!

Antwort

1

Es ist viel einfacher, Ihre eigene Login-Taste mit FB.login stattdessen zu verwenden. Sie können nur FB.getLoginStatus auf Seite laden, um zu überprüfen, ob ein Benutzer angemeldet ist.

Sie auch FB.getLoginStatus verwenden können, um zu überprüfen, ob der Benutzer in der rechten angemeldet ist er, wenn Preise/Kommentare. Sie sollten jedoch aus Sicherheitsgründen eine erneute Überprüfung der Serverseite in Betracht ziehen.

Heres ein Beispiel, wie das Login sieht aus wie mit FB.login und FB.getLoginStatus: http://www.devils-heaven.com/facebook-javascript-sdk-login/

+0

Thank you very much. ich unter Verwendung der versucht: FB.getLoginStatus ( Funktion (response) { console.log (Response.Status); } ); Ich habe es zu einer Funktion: Funktion checkLoginState() { FB.getLoginStatus ( Funktion (response) { console.log (response.Status); } ); } –

+1

in Ordnung, also ... haben Sie irgendwelche Fragen? Übrigens kannst du den endlosen Code mit "statusChangeCallback" und alle Events vergessen. – luschn

+0

Wenn ich ** ** von Facebook abkopple und rufe: checkLoginState(), Das Protokoll ist: "** verbunden **". Aber wenn ich anrufe: FB.getLoginStatus() und checkLoginState(), ist dieses Protokoll: "Unknown '. Warum muss ich FB.getLoginStatus() vor checkLoginState() aufrufen? Es ist dort implementiert. –

Verwandte Themen