2015-01-14 16 views
8

Ich bin der Administrator einer kleinen Gruppe auf Facebook, es hat etwa 40-50 Mitglieder. Jetzt baue ich eine Webseite für die Gruppe, die Benutzer mit Facebook Login autorisieren wird (ich benutze Laravel + SammyK's LaravelFacebookSDK, wenn das wichtig ist).Facebook Login für Gruppenmitglieder

Alles funktioniert gut, es gibt jedoch ein Problem. Ich möchte den Login nur für Mitglieder der Facebook-Gruppe einschränken. Der beste Weg wäre die Verwendung der API/me/groups, aber dafür ist die Berechtigung user_groups erforderlich, die eingeschränkt ist.

Natürlich gibt es "Hacky" -Lösungen, wie jeden Benutzer manuell zu einem App Insight-Benutzer zu machen oder ein Skript zu schreiben, das jeden Tag eine Datenbank auf meinem Server aktualisiert, die die Liste der Gruppenmitglieder enthält einfache, elegante Möglichkeit, dies zu tun?

Ich bezweifle sehr, Facebook wird mir erlauben, die user_groups Erlaubnis nur dafür zu verwenden.

+1

Sie könnten versuchen, sie davon zu überzeugen, dass es die Benutzererfahrung verbessert. Ansonsten geh für die Hacky-Lösung :) – lsouza

+0

Ich bin im selben Punkt. Facebook sollte in den meisten Fällen user_groups erlauben. –

+0

HINWEIS JEDER - dies ist ein bekannter Bug von Facebook. Um zu "helfen" Facebook entscheiden, es zu beheben, sollten Sie alle diesen Fehler abonnieren und kommentieren, dass Sie es behoben müssen. Hier ist der Fehler: developers.facebook.com/bugs/267362886791339 – Shahar

Antwort

1

Sieht aus wie es nur eine schöne Möglichkeit, dies zu erreichen:

Obwohl /me/groups erfordert user_groups Berechtigung zum Abrufen von Gruppen, denen der Benutzer angehört, können Gruppen created by the app ohne es zurückgeben (vorausgesetzt, es gibt natürlich ein gültiges Zugriffs-Token).

Also - es ist natürlich nicht so schön und nahtlos, wie ich es wollte - meine Lösung war, eine neue Facebook-Gruppe mit der App zu erstellen (erfordert nur eine POST-Anfrage) und aktuelle Mitglieder zu diesem neuen zu bewegen.

Bearbeiten: Verschieben von Mitgliedern ist keine Möglichkeit, Beitritt einer App-Gruppe ist nur programmatisch mit dem SDK möglich. Wenn ein Benutzer kein Mitglied dieser Gruppe ist, werde ich sie daher zur Teilnahme auffordern. Es bedeutet, dass jeder beitreten kann und ich manuell die verbieten muss, die ich nicht mag, anstatt manuell zuzulassen, dass ich will, aber angesichts der geringen Publicity kann ich damit umgehen.

+1

"App- und Spielgruppen sind veraltet. Der API-Zugriff für neue Apps wird am 1. Mai 2016 geschlossen. Spiel- und App-Gruppen werden am 17. Oktober für alle Apps veraltet sein , 2016. " –

2

Nun, die Grafik-API bietet diese Funktionalität, wie Sie gesagt haben, würden Sie nur Benutzererlaubnis brauchen, nicht Facebooks. Da Sie die Notwendigkeit und den Nutzen dieser Erlaubnis mitteilen könnten, müssten Sie sie einfach aufschreiben, irgendwo in der Nähe Ihrer Registrierung/Anmeldung. Sie müssen dann die user_groups innerhalb der Bereichsvariablen angeben, die Sie mit der getLoginUrl-Methode senden.

$scope = ['email', 'user_status', 'user_groups']; // it is 'groups' or 'user_groups' 
$login_url = $fqb->auth()->getLoginUrl('http://my-callback/url', $scope); 

Ich habe nicht diesen Code testen, wie ich, keine Anlage zur Hand haben, aber von allem nur lese ich, das ist, wie es sollte Arbeit.

Edit: Fast vergessen, können Sie die Daten aus Ihrem Facebook-Objekt mit der folgenden Notation bekommen würde:

$groups = $fqb->object('me/groups')->get(); 
+0

Gemäß der Facebook API-Dokumentation ist die user_groups-Berechtigung eingeschränkt und wird nicht gewährt, es sei denn, Facebook überprüft meine Anwendung und erlaubt dies ausdrücklich. – nXu

+0

In der Tat habe ich es gerade getestet. Obwohl der Login-Link scope = user_groups enthält, wird nur nach der Berechtigung für die öffentliche Seite gefragt, und wenn ich versuche, die me/groups-Daten abzurufen, wird ein leerer Satz zurückgegeben. – nXu

+0

Dann habe ich dort Richtlinien falsch interpretiert. Das tut mir leid. – ricktap

0

Ja das ist ziemlich "Spaß" zu implementieren. Ich erinnere mich, dass ich es konnte, aber ich habe leider keinen speziellen Code, um zu helfen. Ich kann dir sagen, dass es mehrere Tokens benötigen wird.

Wenn ich mich richtig erinnere, ist dies der logische Fluss:

eigene Token des Benutzers übernehmen.
Dann das Token der Gruppe mit dem Token des Benutzers.

Und dann würden Sie die Daten steuern, die die Person aus Ihrer Anwendung an die Gruppe senden darf.