【问题标题】:Django Rest Framework gives error: You do not have permission to perform this actionDjango Rest Framework 给出错误:您无权执行此操作
【发布时间】:2021-03-09 06:08:25
【问题描述】:

我正在关注this 教程来检查api_key 标头是否存在。该示例似乎用于身份验证目的,我无法弄清楚如何修复它。当我访问 API 端点时出现错误:

{
    "detail": "You do not have permission to perform this action."
}

permisson.py

从 rest_framework.permissions 导入 BasePermission

class Check_API_KEY_Auth(BasePermission):
    def has_permission(self, request, view):
        # API_KEY should be in request headers to authenticate requests
        api_key_secret = request.META.get('API_KEY')
        if 'api_key' in request.headers:
            api_key_secret = request.headers['api_key']
            if api_key_secret == 'adnan':
                print('FOUND')

        return api_key_secret == 'you'

views.py

from rest_framework import viewsets

from .models import App
from .serializers import AppSerializer
from rest_framework.decorators import action
from rest_framework.response import Response
from .permissions import Check_API_KEY_Auth


class AppView(viewsets.ModelViewSet):
    queryset = App.objects.all()
    permission_classes = (Check_API_KEY_Auth,)
    serializer_class = AppSerializer

    def show(self, request, format=None):
        content = {
            'status': 'request was permitted'
        }
        return Response(content)

我不需要用户身份验证,我只需要检查 API_KEY 是否存在,如果存在则查询表中的 db 并返回结果。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    如果permission_classes 中的所有权限都返回True,则django-rest-framework 授予权限,如果列表中的任何一个都返回False,则权限被拒绝

    查看Check_API_KEY_Auth 类后,唯一会返回True 的情况是URL 中的API_KEY=you,否则它将始终返回False,这就是为什么当URL 中没有API_KEY 时给出这个错误消息。

    教程中的那个是最短的一个,它直接将api_key_secret == settings.API_KEY_SECRET的输出返回到视图,只让给TrueFalse

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2018-08-07
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多