如何在api上给定访问令牌时创建新用户和新的django allauth社交帐户?

Kri*_*isF 7 django facebook tastypie django-allauth

我有一个移动应用程序,允许用户通过Facebook注册.从FB收到访问令牌后,我将其发送到Django后端.

但那又怎样?

django-allauth里面有一个方法,我可以提供访问令牌,让它创建新的用户/社交帐户吗?

或者我需要手动完成所有操作吗?

Kri*_*isF 6

在发布问题后,我似乎总是想出答案.在任何情况下,以下是UserResource上的自定义方法(使用ApiKeyAuthentication的tastypie api).其中大部分来自allauth.socialaccount.providers.facebook.views中的login_by_token方法.

如果有人发布更好的答案,我不会在一段时间内选择正确的答案.

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 ) 
Run Code Online (Sandbox Code Playgroud)