【问题标题】:Django custom authenticationDjango 自定义身份验证
【发布时间】:2016-03-03 12:23:29
【问题描述】:

我在我的应用程序中使用 Django REST Framework。我需要身份验证,但不是默认身份验证。我有一个模型:

class Worker(models.Model):
    token = models.CharField(...)
    ip = models.GenericIPAddressField(...)
    created_date = models.DateTimeField(...)
    last_update = models.DateTimeField(...)

Worker 通过我的 API 发送消息以查看继承自 Django REST Framework 的 APIView 的 WorkerView。令牌在请求的标头中发送:

class WorkerView(APIView):
    def post(self, request):
        # some not important code

我有一个验证方法:

def authenticate(request):
    try:
        ip = request.META.get("REMOTE_ADDR", None)
        token = request.META.get("HTTP_AUTHORIZATION", None)
    ...

我想到了两个解决方案:

  1. 创建一个 mixin 类并在我的 WorkerView 中继承它:

    class WorkerView(AuthenticationMixin, APIView)
        ...
    
  2. 从我的身份验证方法中创建一个类装饰器并像这样使用它:

    @authenticate
    class WorkerView(APIView)
    

但在这两种情况下,我都需要将请求参数传递给身份验证方法。 怎么做?或者也许有更好的解决方案来解决我的问题?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您为什么不按照此处定义的方式创建自定义身份验证类? http://www.django-rest-framework.org/api-guide/authentication/#custom-authentication

    【讨论】:

    • 因为我需要将使用登录名/密码登录的用户和使用令牌登录的用户分开。而且我不想修改/扩展用户模型。相反,我想授权我的模型对象,而不是用户对象。我知道并且我使用了自定义身份验证。如果我想使用它,我不会问。
    • 我在这里没有发现问题。您可以一次使用任意数量的身份验证类,创建自定义身份验证类是完成任务的好方法。
    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 2017-01-07
    • 2015-11-12
    • 2015-12-26
    • 2021-01-09
    • 2017-02-19
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多