django - 如何在通过 api 获得访问 token 时创建新用户和新的 django allauth 社交帐户?

标签 django facebook tastypie django-allauth

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

然后呢?

在 django-allauth 中是否有一种方法,我可以将访问 token 提供给它来创建新的用户/社交帐户?

还是我需要全部手动完成?

最佳答案

我似乎总是在发布问题后立即找出答案。无论如何,以下是 UserResource 上的自定义方法(tastypie api 使用 ApiKeyAuthentication)。其中大部分取自 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 ) 

关于django - 如何在通过 api 获得访问 token 时创建新用户和新的 django allauth 社交帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381732/

相关文章:

android - Facebook SDK 3.0 Android - 缺少 token

facebook - 我可以通过 api 获得 facebook 组墙帖子吗?

django - 薄饼否定过滤器

django 查询所有相关集的过滤?

python - Django操作错误 'no such column:' sqlite

facebook - 如何使用 Graph API 或 FQL 获取最近的事件?

django - 在 Tastypie 中将过滤器合并为一个查询

javascript - Django 动态字段 - 无法从模板中添加的多个行获取数据

python - 链接到 emacs 中的 python 模块

javascript - 将非 AMD 兼容的 javascript 模块与 require.js 一起使用?