Frage

Um zu überprüfen, ob der Suer alle erforderlichen Berechtigungen erteilt hat, mache ich Folgendes:

    FB.login(function(response){
             console.log(response.status);
            if (response.status == 'connected') {
               /* user gave permssions */
            }else{
                 /* user didnt, unmark the checkbox */
                 $('input:checkbox').removeAttr('checked');
            }
    }, { scope: 'publish_stream' });

Das Problem ist, dass dies immer true zurückgibt, egal ob der Benutzer:meldet sich an, lässt das Popup aus oder schließt es.

Irgendeine Idee warum?

Habe auch versucht:if (response.authResponse) { ohne Erfolg.

War es hilfreich?

Lösung

Hier geht es darum publish_stream ist ein erweiterte Erlaubnis, was bedeutet, dass der Benutzer diese Berechtigung deaktivieren kann.Wenn ein Benutzer in Ihrem Rückruf auf den Codeblock stößt, hat er im Allgemeinen Ihre App authentifiziert, jedoch nicht unbedingt mit allen von Ihnen angeforderten Berechtigungen, da dies bei einigen der Fall sein kann erweiterte Berechtigungen. response.status wird nur verwendet, um den Status mitzuteilen, ob der Benutzer die Anwendung authentifiziert hat, nicht, ob er alle von Ihnen angeforderten Dialogaufforderungen/Berechtigungen akzeptiert hat oder nicht.In Ihrem Fall, publish_stream ist eine erweiterte Berechtigung, sodass Sie nicht garantieren können, dass Sie diese Berechtigung für den Benutzer in Ihrem Rückruf haben.Wenn Sie danach fragen publish_stream als inkrementelle Berechtigung, nachdem sich ein Benutzer bereits authentifiziert hat, dann ist Ihre bedingte Prüfung aktiviert response.status gibt immer true zurück (da der Benutzer Ihre Anwendung per Definition bereits authentifiziert hat).

Wenn Sie überprüfen möchten, dass Sie über das verfügen publish_stream Berechtigung in Ihrem Rückruf, prüfen Sie, ob die Berechtigung verwendet wird /me/permissions Endpunkt auf der Diagramm-API.

Was Sie wollen, ist ungefähr so:

FB.login(function(response){
    if (response.status == 'connected') {
        FB.api('/me/permissions', function(response) {
            var permsArray = response.data[0];
            // Permissions that are needed for the app
            var permsNeeded = ['publish_stream'];
            var permsToPrompt = [];
            for (var i in permsNeeded) {
                if (permsArray[permsNeeded[i]] == null) {
                    permsToPrompt.push(permsNeeded[i]);
                }
            }

            if (permsToPrompt.length > 0) {
                $('input:checkbox').removeAttr('checked');
            }
         }
    } else {
        /* user didnt, unmark the checkbox */
        $('input:checkbox').removeAttr('checked');
    }
}, { scope: 'publish_stream' });

Andere Tipps

Ich weiß nicht warum, aber der folgende Code funktioniert für mich in Ordnung, mindestens ~

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top