Frage in Kürze: Anmeldung mit DRF, Python-Social-Auth und Angularjs arbeitet mit Facebook, aber nicht Google.Google-Authentifizierung mit Django-Rest-Framework und Python-Social-Auth
Ich baue eine Django-App, die es Benutzern ermöglichen soll, sich über Facebook und Google zusätzlich zur lokal gespeicherten E-Mail-/Passwort-Kombination anzumelden. Es funktioniert wie folgt:
- Für beide Anmeldungen und Einbuchen AngularJS initiiert FB und Google APIs (FB.init und gapi.auth2.init) mit ihren jeweiligen app_ids. Alle hierfür benötigten js-Bibliotheken sind in den Seiten enthalten.
- Basierend auf der Benutzerauswahl können sich Benutzer über Facebook oder Google anmelden oder ihre E-Mail/Passwort-Kombination eingeben.
- Alle erforderlichen Informationen einschließlich ihrer
access_token
wird über FB oder Googles API gesammelt. - Wenn der Benutzer das Formular nach dem Ausfüllen aller relevanten Details abschickt (die Anmeldung erfordert die Eingabe zusätzlicher Daten), werden die Daten einschließlich
access_token
durch eine AJAX-Anfrage an den Server gesendet. - Auf der Serverseite werden die Anfragen von den klassenbasierten Ansichten LoginView und SignUpView akzeptiert und verarbeitet. E-Mail-basierte Anmeldung/Anmeldung wird direkt durch den Code behandelt. Die Google/FB-basierte Anmeldung/Anmeldung wird an die
do_auth
-Funktion von python-social-auth zur Authentifizierung weitergeleitet. - Wenn der Anbieter
facebook
ausgewählt ist, funktioniert das einwandfrei. Wenn esGoogle
(versucht sowohlgoogle-oauth2
undgoogle-plus
) ist, löstdo_auth
schließlich einen 403 Verbotenen Fehler. Wenn die zugehörige URL, https://googleapis.com/plus/v1/people/me?access_token=ACCESS_TOKEN&alt=json an den Browser kopiert wird, zeigt es eine Fehlermeldung:
Tageslimit für nicht authentifizierte Nutzung überschritten. Die fortgesetzte Nutzung erfordert Anmeldungen
- Ich habe dafür gesorgt, die folgenden Dinge:
- Aktiviert Google+ API in der Google-Entwickler-Konsole für die entsprechende App
- Von der Google Developer Console, hinzugefügt
http://localhost:5001
zu Javascript-Ursprungsfeld undhttp://localhost:5001/social/complete
Umleiten uri Feld (Späteres Feld wird später gefüllt. Das gleiche Ergebnis mit oder ohne.) - Generierte Schlüssel und kopiert client_id und client_secret t o
settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY
undsettings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET
. Double hat ihre Genauigkeit überprüft. - Hinzugefügt
'social.backends.google.GoogleOAuth2'
zu settings.AUTHENTICATION_BACKENDS. Versucht, GoogleOAuth2 und GooglePlus zusammen und separat zu platzieren. - Versucht alle diese in 2-3 mit PLUS auch anstelle von OAUTH2. Immer noch das gleiche Ergebnis.
- Nach der Einstellung erneut versucht,
settings.SOCIAL_AUTH_USE_DEPRECATED_API
als True. Dies scheitert auch, aber der Fehler ist jetzt 401.
Was auch diese Arbeit mit Google-Authentifizierung als nächstes zu tun bekommen? Durch viele andere ähnliche Fragen und Probleme in Github gegangen.
Hier ist der entsprechende Code:
class SignUpView(CreateAPIView):
def create(self, request, *args, **kwargs):
provider = request.data['provider']
strategy = load_strategy(request)
backend = load_backend(strategy=strategy, name=provider, redirect_uri=None)
token = request.data['access_token']
try:
user = backend.do_auth(token, user=None, **data)
except AuthAlreadyAssociated:
pass
Fand diese Antwort von @aragen relevant meine Frage: http://stackoverflow.com/a/28355531/7447662. Ich folge der gleichen Vorgehensweise wie deine. Irgendeine Idee dazu? –