【问题标题】:How to manually authenticate after get django user?获取 django 用户后如何手动进行身份验证?
【发布时间】:2011-01-21 03:02:04
【问题描述】:

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

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

还有其他方法可以实现吗?

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

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

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

    login(request, user)

    【讨论】:

    • 我不知道。只是特里西!
    • 如果在您的应用程序中登录的唯一位置是您正在执行此操作的视图,那么它还不错。如果您希望管理员登录页面或 Django 身份验证系统的任何其他用途正常工作,您真的应该使用身份验证后端。
    • login(request, user, backend='django.contrib.auth.backends.ModelBackend') 也可以。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 2020-01-05
        • 2017-03-12
        • 1970-01-01
        • 2011-04-29
        相关资源
        最近更新 更多