10

我正在编写一个 facebook-connect 应用程序,该应用程序在 facebook 上进行身份验证会话后登录用户,问题是在获取用户对象后如何在 django 上对用户进行身份验证?

user = User.objects.get(email=email)
user = authenticate(username=user.username, password=user.password)
login(request, user)

还有另一种方法可以实现这一目标吗?

4

3 回答 3

22

如果你这样做,你实际上不需要先验证()(但我没有告诉你!):

user.backend = 'django.contrib.auth.backends.ModelBackend'

login(request, user)

于 2011-01-21T04:47:30.957 回答
4

根据您的问题和示例,您应该查看并注意两件事。

首先,您处理备用身份验证方法(例如 facebook oauth)的方式是身份验证后端。您可以查看djangopackages.com以获取现有选项或编写自己的选项。您配置的后端将定义authenticate()期望接收的参数(例如,facebook 后端不会期望密码,因为密码在这种情况下没有意义)。

其次,执行 user.password 不会让您获得用户的实际密码。作为一种安全措施,Django 将密码存储为加盐单向哈希。这意味着,根据设计,您无法根据数据库中存储的内容来确定用户的密码。

于 2011-01-21T04:33:50.973 回答
1

authenticate()并且login()每个都提供不同的任务,并且两者(或从 Django 代码中提取并为每个版本的 Django 更新的等效项)都是登录用户所必需的。

于 2011-01-21T03:15:26.247 回答