我正在写一个facebook-connect应用程序,在Facebook上验证会话后登录用户,问题是如何在获取用户对象后在django上验证用户?
user = User.objects.get(email=email)
user = authenticate(username=user.username, password=user.password)
login(request, user)
还有另一种方法可以达到这个目的吗?
答案 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 更新)以便记录用户。