我正在编写一个 facebook-connect 应用程序,该应用程序在 facebook 上进行身份验证会话后登录用户,问题是在获取用户对象后如何在 django 上对用户进行身份验证?
user = User.objects.get(email=email)
user = authenticate(username=user.username, password=user.password)
login(request, user)
还有另一种方法可以实现这一目标吗?
我正在编写一个 facebook-connect 应用程序,该应用程序在 facebook 上进行身份验证会话后登录用户,问题是在获取用户对象后如何在 django 上对用户进行身份验证?
user = User.objects.get(email=email)
user = authenticate(username=user.username, password=user.password)
login(request, user)
还有另一种方法可以实现这一目标吗?
如果你这样做,你实际上不需要先验证()(但我没有告诉你!):
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
根据您的问题和示例,您应该查看并注意两件事。
首先,您处理备用身份验证方法(例如 facebook oauth)的方式是身份验证后端。您可以查看djangopackages.com以获取现有选项或编写自己的选项。您配置的后端将定义authenticate()
期望接收的参数(例如,facebook 后端不会期望密码,因为密码在这种情况下没有意义)。
其次,执行 user.password 不会让您获得用户的实际密码。作为一种安全措施,Django 将密码存储为加盐单向哈希。这意味着,根据设计,您无法根据数据库中存储的内容来确定用户的密码。
authenticate()
并且login()
每个都提供不同的任务,并且两者(或从 Django 代码中提取并为每个版本的 Django 更新的等效项)都是登录用户所必需的。