使用django_facebook从Facebook获取用户信息

2 投票
2 回答
527 浏览
提问于 2025-04-18 17:38

首先,我想对社区表示歉意,如果这算是重复提问的话。我在StackOverflow上搜索了一些可能对我有帮助的内容,但没有找到合适的答案。所以我来这里说说我的问题。

也许是因为我技术水平不够,我个人在理解django_facebook的文档时遇到了困难。我把整个文档都看了一遍,虽然我觉得里面的每个部分都解释得不错,但要把这些信息拼凑成一个完整的图景对我来说还是挺难的……

我成功地把django_facebook和我的Facebook应用连接起来了,甚至可以登录,但我无法获取已登录用户的信息。我的目标是让用户能够在我的网站上用Facebook登录或注册,并从Facebook获取他们的基本信息,这样我就可以在他们的个人资料中建议使用这些信息。

如果你能详细解释一下登录/注册以及获取用户信息的整个过程,我将非常感激。

附言:有人建议我使用django_allauth。我应该换成这个吗?如果换的话,django_facebook和django_allauth各自的优缺点是什么?

再附一句:我也没能找到关于django_facebook或django_allauth的好教程。如果你有相关链接,请分享给我 :)

2 个回答

1

关于django-facebook的简单介绍告诉我,信息是保存在

BaseFacebookModel

这里有一个叫做post_connect的信号。你可以用这个信号从上面的模型中获取信息,并把它保存到你的个人资料里,如果你想的话。

在django-allauth中,这个过程也很简单。我曾经做过,获取用户的出生日期就是这样实现的。这里有一个叫做SocialAccount的模型,它存储了用户的公开信息。额外的数据以json的形式存储。你可以直接使用这些数据,并在allauth认证用户后把它用到UserProfile中。

如果这对你有帮助,请告诉我。

1

这里有一个教程,讲解了如何使用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']

撰写回答