【问题标题】:How to limit Django REST API to only ONE user?如何将 Django REST API 限制为只有一个用户?
【发布时间】:2021-01-02 13:51:44
【问题描述】:

我正在使用 Django 编写一个 REST API,我需要将一些 URL 限制为仅供其创建者使用。我实际上使用的是身份验证令牌,但实际上任何拥有令牌的人都可以使用我的 API,因此我需要将某些功能限制为特定用户。

一个例子是这样的:

Jonh Doe Token: roh2938rhe63eh0832yey3289
public --> domain.com/api/bobby/public/
public --> domain.com/api/jonhdoe/public/
private --> domain.com/api/jonhdoe/private/

不知何故,只有 Jonh Doe 才能访问该私有 URL,即使返回的数据与往常相同,但只是私有的。

【问题讨论】:

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


    【解决方案1】:

    每个用户都应该有他们唯一的身份验证令牌。允许某些用户访问的方法是创建权限。 Django 中的权限用于验证用户是否有权执行某些操作。 Django创建权限的方法是在相关的应用程序文件夹中创建permissions.py文件,在该文件中你应该编写继承permissions.BasePermission类并覆盖has_permission方法的权限类,如果用户应该有权限,则返回True或@ 987654325@ 否则。之后,您只需将您的权限类添加到permission_classes 列表中。

    permissions.py

    from rest_framework import permissions
    
    
    class IsPrivateAllowed(permissions.BasePermission):
        """
        Allow access to request owner
        """
        def has_permission(self, request, view):
            # return True if allowed else False
            # 'username' is the request url kwarg eg. bobby, jonhdoe
            return view.kwargs.get('username', '') == request.user.username
    

    我们创建了IsPrivateAllowed 权限。对于您的示例,您应该检查请求令牌是否与 url 中的 name 参数兼容。现在导入它并将其添加到基于类的视图的权限列表中:

    . . .
    from .permissions import IsPrivateAllowed
    
    class PrivateAPIView(APIView):
        permission_classes = [IsAuthenticated, IsPrivateAllowed]
        . . .
    

    这里发生的情况是当用户触发 API 调用时,Django 将首先检查用户是否满足列表中的所有权限,如果满足 - 用户将有权访问特定的 API 调用。

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 2019-05-14
      • 2018-08-20
      • 2015-10-09
      • 2021-04-03
      • 2015-02-20
      • 2016-04-04
      • 2022-11-05
      • 1970-01-01
      相关资源
      最近更新 更多