Die fb.login-Antwort gibt immer „true“ zurück
-
12-12-2019 - |
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.
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.