如何在获取django用户后手动验证?

时间:2011-01-21 03:02:05

标签: django django-authentication

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

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

还有另一种方法可以达到这个目的吗?

3 个答案:

答案 0 :(得分:18)

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

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

login(request, user)

答案 1 :(得分:4)

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

首先,您处理备用身份验证方法(例如facebook oauth)的方式是authentication backends。您可以查看djangopackages.com了解现有选项或编写自己的选项。您配置的后端将定义哪些参数authenticate()期望接收(例如,Facebook后端不会期望密码,因为密码在该上下文中没有意义)。

其次,执行user.password不会获得用户的实际密码。作为安全措施,Django将密码存储为salted one-way hashes。这意味着,根据设计,您无法根据数据库中存储的内容确定用户的密码。

答案 2 :(得分:1)

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