Ich finde immer die Antworten direkt nach dem Stellen der Frage. In jedem Fall ist das folgende eine benutzerdefinierte Methode für UserResource (tastypie api mit ApiKeyAuthentication). Das meiste davon stammt aus der Methode login_by_token in allauth.socialaccount.providers.facebook.views.
Ich werde meine Antwort für eine Weile nicht korrekt auswählen, falls jemand eine bessere Antwort schreibt.
def facebook_login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json'))
access_token = data.get('access_token', '')
from allauth.socialaccount import providers
from allauth.socialaccount.models import SocialLogin, SocialToken, SocialApp
from allauth.socialaccount.providers.facebook.views import fb_complete_login
from allauth.socialaccount.helpers import complete_social_login
try:
app = SocialApp.objects.get(provider="facebook")
token = SocialToken(app=app,
token=access_token)
login = fb_complete_login(app, token)
login.token = token
login.state = SocialLogin.state_from_request(request)
ret = complete_social_login(request, login)
#if we get here we've succeeded
return self.create_response(request, {
'success': True,
'username': request.user.username,
'user_id': request.user.pk,
'api_key': request.user.api_key.key,
})
except:
# FIXME: Catch only what is needed
return self.create_response(request, {
'success': False,
'reason': "Bad Access Token",
}, HttpForbidden)
Ich verbrachte Stunden über den allauth Code rätselhaft , und kam schließlich mit etwas ziemlich ähnlich zu diesem ... aber nur das gerade jetzt gefunden. Vielen Dank! – Kobold
Wie nennt man diesen Code? – diofeher
mit den neuen Versionen seine jetzt 'fb_complete_login (Anfrage, App, Token)' – psychok7