Verwalten von Berechtigungen in Facebook Login für das Web

Beim Launch des Login-Dialogs musst du unbedingt festlegen, auf welche Daten deine App Zugriff beantragt. Diese Beispiele verwenden alle den scope-Parameter zum Beantragen des Zugriffs auf die Daten einer Person. Sie werden alle als Berechtigungen bezeichnet.

Alles über Berechtigungen erfährst du in unserem Berechtigungsleitfaden. Bedenke aber die folgenden Punkte im Zusammenhang mit Berechtigungen und dem Login-Dialog:

  • Du fragst Berechtigungen beim Erstellen des Dialogs an. Die daraus resultierenden Berechtigungen sind an den zurückgegebenen Zugriffsschlüssel gebunden.
  • Bei anderen Plattformen gibt es unter Umständen andere Berechtigungen. Unter iOS kannst du beispielsweise Orte anfragen, an denen eine Person markiert wurde, während diese Berechtigung in der Webversion deiner App nicht erforderlich ist.
  • Du kannst Berechtigungen auch bei Bedarf später hinzufügen. Wenn du eine neue Berechtigung benötigst, fügst du diese einfach der Liste der bereits erteilten Berechtigungen hinzu. Dann startest du den Login-Dialog erneut, und die neue Berechtigung wird angefragt.
  • Im Login-Dialog können Nutzer bestimmte Berechtigungen, nach denen deine App fragt, ablehnen. Deine App muss damit umgehen können. Mehr dazu erfährst du im Thema Berechtigungsdialog.
  • Apps, die mehr Informationen als die Standardfelder und die email-Berechtigung anfragen, müssen von Facebook geprüft werden, bevor sie allgemein verfügbar gemacht werden. Mehr dazu erfährst du in unserer Dokumentation für den Login Review und unseren allgemeinen Prüfungsrichtlinien.

Hinzufügen von Berechtigungen

Als Best Practice für Facebook Login solltest du keine Leseberechtigungen und Veröffentlichungsberechtigungen gleichzeitig anfragen. Deine App kann später immer noch mehr Berechtigungen anfragen, nachdem sich jemand angemeldet hat. Dazu musst du den Login-Dialog einfach mit der neuen Berechtigung starten.

Angenommen, du hast einen Login-Button mit den folgenden Berechtigungen eingerichtet:

<fb:login-button scope="public_profile" onlogin="checkLoginState();">
</fb:login-button>

Wenn du dann in /me/permissions nach Berechtigungen suchst, die nach der Zustimmung erteilt wurden, erhältst du das Ergebnis:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    }
  ]
}

Wenn du später die email-Berechtigung hinzufügen möchtest, könntest du den Dialog wie folgt mit der FB.login()-Funktion neu starten:

FB.login(function(response) {
   console.log(response);
}, {scope: 'email'});

(Diese Funktion muss vom Event-Handler eines Buttons aufgerufen werden. Andernfalls wird sie wahrscheinlich von Pop-up-Blockern im Browser blockiert.)

Damit fragst du lediglich die neue Berechtigung an. Wenn die neue Berechtigung angenommen wird und du /me/permissions prüfst, wird folgendes Ergebnis angezeigt:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    },
    {
      "permission":"email",
      "status":"granted"
    }
  ]
}

Beachte, dass die neue email-Berechtigung der Liste der zulässigen Berechtigungen hinzugefügt wurde.

Erneutes Anfragen von verweigerten Berechtigungen

Bei Facebook Login können Nutzer einige Berechtigungen für deine App ablehnen. Wenn jemand user_likes („Gefällt mir“-Angaben) ablehnt und du über /me/permissions die gewährten Berechtigungen prüfst, wird dieses Ergebnis angezeigt:

{
  "data":
    [
      {
        "permission":"public_profile",
        "status":"granted"
      },
      {
        "permission":"user_likes",
        "status":"declined"
      }
    ]
}

Beachte, dass die Berechtigung user_likes verweigert und nicht gewährt wurde.

Es ist in Ordnung, wenn du bei Nutzern, die App-Berechtigungen abgelehnt haben, diese erneut anfragst, allerdings nur einmal. Du solltest dem Nutzer einen Informationsbildschirm anzeigen, auf dem erklärt wird, warum er die Berechtigung gewähren sollte, und über den du die Berechtigung dann erneut anforderst. Wenn du aber die im vorherigen Abschnitt beschriebene Methode verwendest, fragt der Login-Dialog diese Berechtigung nicht an.

Das liegt daran, dass eine einmal verweigerte Berechtigung nicht mehr über den Login-Dialog angefordert wird, sofern du das nicht explizit festlegst.

Füge dazu einfach das auth_type: rerequest-Kennzeichen zum FB.login()-Aufruf hinzu:

FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

Die verweigerte Berechtigung wird dann erneut über den Login-Dialog angefragt. Der Dialog sieht dem Dialog im Abschnitt zum erneuten Anfragen von Berechtigungen sehr ähnlich, ermöglicht aber das erneute Anfragen einer verweigerten Berechtigung.