【问题标题】:Custom Django Authentication自定义 Django 身份验证
【发布时间】:2016-11-07 13:12:21
【问题描述】:

我有一个名为 Customers(username,password ..etc) 的模型和一个名为 User(username,password...etc) 的模型。
我想创建两个具有不同身份验证的不同 API。
应该使用用户用户名、密码进行身份验证
第二个应该使用客户用户名、密码进行身份验证。
关于如何做到这一点的任何想法?
谢谢!

【问题讨论】:

    标签: django django-rest-framework django-rest-auth


    【解决方案1】:

    我建议以下选项:

    1.

    我假设用户模型是您应用的“真实”用户。如果这是真的,请使用 django 的默认用户模型类。它开箱即用。

    对于客户模型,使其继承自 AbstractBaseUser,这将为您提供开箱即用的密码功能,您可以根据需要添加其他字段。

    现在您可以创建 2 个不同的登录网址。 1 个用于检查用户模型的用户 url,另一个用于客户模型。这样可以避免给每个人带来任何混淆。

    如果您更喜欢单个 url,则必须提及模型类以及用户名和密码才能知道在哪个表中验证它们。

    2.

    创建两个配置文件模型:UserProfile 和 CustomerProfile

    每个都与 django 的默认用户模型具有一对一的关系。

    基本上,用户可以拥有“真实”用户或客户的个人资料。

    在这种情况下,当您创建任何用户时,请检查是否要附加 UserProfile 或 CustomerProfile。

    在这种情况下,只使用一个登录 URL 是有意义的。从用户的登录信息中,您可以首先从 User 表中获取用户,然后通过在 CustomerProfile 表中运行查询来检查它是否是客户。

    【讨论】:

      【解决方案2】:

      我建议您使用 django.contrib.auth.user 类进行经典身份验证。您可以从该类继承或向您自己的模型添加 OneToOne 关系,如下所示

      from django.contrib.auth.models import User
      
      class YourUser(models.Model):
          user = models.OneToOneField(User, on_delete=models.CASCADE)
      

      对于剩下的问题,你应该添加更多细节,甚至是你的一些代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 2015-11-12
        • 2015-12-26
        • 2021-01-09
        • 2017-02-19
        • 1970-01-01
        • 2020-04-01
        相关资源
        最近更新 更多