使用django_facebook从Facebook获取用户信息
首先,我想对社区表示歉意,如果这算是重复提问的话。我在StackOverflow上搜索了一些可能对我有帮助的内容,但没有找到合适的答案。所以我来这里说说我的问题。
也许是因为我技术水平不够,我个人在理解django_facebook的文档时遇到了困难。我把整个文档都看了一遍,虽然我觉得里面的每个部分都解释得不错,但要把这些信息拼凑成一个完整的图景对我来说还是挺难的……
我成功地把django_facebook和我的Facebook应用连接起来了,甚至可以登录,但我无法获取已登录用户的信息。我的目标是让用户能够在我的网站上用Facebook登录或注册,并从Facebook获取他们的基本信息,这样我就可以在他们的个人资料中建议使用这些信息。
如果你能详细解释一下登录/注册以及获取用户信息的整个过程,我将非常感激。
附言:有人建议我使用django_allauth。我应该换成这个吗?如果换的话,django_facebook和django_allauth各自的优缺点是什么?
再附一句:我也没能找到关于django_facebook或django_allauth的好教程。如果你有相关链接,请分享给我 :)
2 个回答
关于django-facebook的简单介绍告诉我,信息是保存在
BaseFacebookModel
这里有一个叫做post_connect的信号。你可以用这个信号从上面的模型中获取信息,并把它保存到你的个人资料里,如果你想的话。
在django-allauth中,这个过程也很简单。我曾经做过,获取用户的出生日期就是这样实现的。这里有一个叫做SocialAccount的模型,它存储了用户的公开信息。额外的数据以json的形式存储。你可以直接使用这些数据,并在allauth认证用户后把它用到UserProfile中。
如果这对你有帮助,请告诉我。
这里有一个教程,讲解了如何使用all_auth进行社交登录。
你可以直接从allauth对象获取数据,方法是在你的view
中使用下面的代码片段:
首先,使用以下代码获取账户信息:
account_uid = SocialAccount.objects.filter(user_id=request.user.id, provider='facebook')
然后,使用下面的成员属性,你可以获取已经公开的参数。
account_uid[0].get_avatar_url()
account_uid[0].extra_data['username']
account_uid[0].extra_data['first_name']
account_uid[0].extra_data['last_name']
account_uid[0].extra_data['gender']
account_uid[0].extra_data['email']
account_uid[0].extra_data['link']
account_uid[0].extra_data['uid']