【问题标题】:how to authenticate users in Django rest framework?如何在 Django REST 框架中对用户进行身份验证?
【发布时间】:2018-03-04 17:51:59
【问题描述】:

我在我的 Django API 中添加了一些用于发布删除和放置数据的 URL,但我不知道如何首先对用户进行身份验证,并让他们中的一些人使用这些方法并禁止其中一些人

【问题讨论】:

  • 您能否指定您想要什么样的身份验证,您希望登录用户发布、放置和删除您的数据。
  • @shankarj67 我想让超级用户做这些动作而其他人做不到

标签: python django django-rest-framework django-views


【解决方案1】:

据我所知,你可以使用内置装饰器

@user_passes_test

然后您可以指定谁可以访问您的视图,如下所示,

from django.contrib.auth.decorators import user_passes_test

def admin_user(user):
    return user.is_superuser # write your logic here

@user_passes_test(admin_user)
def your_view(request):
    --------

查看文档以获得更多说明:https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.decorators.user_passes_test

【讨论】:

  • 你可以使用这个@login_required,但问题是所有用户都可以访问我的视图。
【解决方案2】:

由于您使用标签 django-rest-framework,我假设您的视图是使用 Django REST 框架创建的。

首先,您应该强制用户成为 authenticated to use the API。其次,您需要定义 types of permissions are needed 来执行这些操作。

您说 Django 超级用户应该能够执行这些操作。因此,您可以创建自定义权限以确保只有 Django 超级用户的用户才有权限:

from rest_framework.permissions import BasePermission


class IsSuperUser(BasePermission):
    """
    Allows access only to admin users.
    """

    def has_permission(self, request, view):
        is_superuser = request.user and request.user.is_superuser
        if not is_superuser and request.user:
            # Your ban logic goes here
            pass
        return is_superuser

那么在你看来,你可以这样做:

from rest_framework.views import APIView
from your_app.permissions import IsSuperUser

class YourApiView(APIView):
    permission_classes = [IsSuperUser]

如果这些信息对您来说还不够,我建议您关注 Django REST Framework's tutorial

【讨论】:

  • 你能写一个例子禁止逻辑吗
  • @MahdiSorkhmiri - 我不能为你写禁令逻辑,不。你必须自己设计。我不知道您对逻辑的要求是什么。这是您必须自己做的事情,如果遇到问题,请返回 StackOverflow。
猜你喜欢
  • 2021-11-28
  • 2017-08-02
  • 1970-01-01
  • 2018-02-12
  • 2019-05-02
  • 2017-12-05
  • 1970-01-01
  • 2017-01-17
  • 2013-06-29
相关资源
最近更新 更多