Facebook zaleca to podczas korzystania z Facebookalogin powinieneś najpierw poprosić użytkownika o jak najmniejszą liczbę uprawnień, aw szczególności unikać prośby o pozwolenie na publikację, dopóki użytkownik nie będzie musiał opublikować czegoś za pośrednictwem Twojej witryny - https://developers.facebook.com/docs/facebook-login/permissions/#optimizing.
Próbowaliśmy zaimplementować to za pomocąpython-social-auth "django, ale wygląda na to, że nie ma sposobu, aby poprosić o różne uprawnienia w różnych punktach witryny - zakres jest ustawiany za pomocą SOCIAL_AUTH_FACEBOOK_SCOPE
ustawienie i nie można później poprosić o inny zakres (np. wykluczając publish_actions
od SOCIAL_AUTH_FACEBOOK_SCOPE
, a następnie prosząc użytkownika o udzielenie tego pozwolenia, gdy próbuje publikować posty z Twojej witryny na Facebooku).
Czy ktoś wie, czy jest to możliwe w aplikacji python-social-auth, a jeśli tak, to w jaki sposób?
Odpowiedzi:
4 dla odpowiedzi № 1(Poniższy tekst został wyodrębniony z dokumentów pod adresem http://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-provider)
W tej chwili python-social-auth nie zapewniametoda definiowania wielu zakresów dla jednego zaplecza, jest to zwykle pożądane, ponieważ zaleca się, aby zapytać użytkownika o minimalny możliwy zakres i zwiększyć dostęp, gdy jest to naprawdę potrzebne. Możliwe jest dodanie nowego zaplecza, rozszerzającego oryginalny, aby osiągnąć to zachowanie, są na to dwa sposoby.
Nadrzędny get_scope()
metoda
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
def get_scope(self):
scope = super(CustomFacebookOAuth2, self).get_scope()
if self.data.get("extrascope"):
scope += [("foo", "bar")]
return scope
Ta metoda jest dość prosta, zastępuje metodę, która zwraca wartość zakresu w zapleczu (get_scope()
) i dodaje dodatkowe wartości do listy, jeśli zostało to wskazane przez parametr w GET
lub POST
dane (self.data
).
Umieść ten nowy backend w jakimś miejscu w swoim projekcie i zamień oryginał FacebookOAuth2
w AUTHENTICATION_BACKENDS
z tą nową wersją.
Definiowanie zaplecza do obsługi zakresu
Można zrobić to samo, definiując sekundębackend, który rozciąga się od oryginału, ale zastępuje nazwę, będzie to oznaczać nowe adresy URL, a także nowe ustawienia dla nowego zaplecza (ponieważ nazwa jest używana do tworzenia nazw ustawień), oznacza również nową aplikację u dostawcy, ponieważ nie wszyscy dostawcy daje możliwość zdefiniowania wielu adresów URL przekierowań. Aby to zrobić, po prostu dodaj backend, taki jak:
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
name = "facebook-custom"
Umieść ten nowy backend w jakimś miejscu w swoim projekcie, zachowując oryginał FacebookOAuth2
w AUTHENTICATION_BACKENDS
. Teraz będzie działać nowy zestaw adresów URL:
/login/facebook-custom
/complete/facebook-custom
/disconnect/facebook-custom
A także nowy zestaw ustawień:
SOCIAL_AUTH_FACEBOOK_CUSTOM_KEY = "..."
SOCIAL_AUTH_FACEBOOK_CUSTOM_SECRET = "..."
SOCIAL_AUTH_FACEBOOK_CUSTOM_SCOPE = [...]
Gdy potrzebne są dodatkowe uprawnienia, po prostu przekieruj użytkownika do /login/facebook-custom
a następnie pobierz wpis uwierzytelniania społecznościowego dla tego nowego zaplecza za pomocą user.social_auth.get(provider="facebook-custom")
i użyj access_token
w tym.