简体   繁体   English

自定义Django休息框架身份验证响应{“详细信息”:“未提供身份验证凭据。”}

[英]Customize Django rest framework authentication response {“detail”: “Authentication credentials were not provided.”}

I am using django 2.1 and python 3.6 and django rest framework 3.8.2 ... I am trying to find a way to customize the json response when authentication failed. 我正在使用django 2.1和python 3.6和django rest framework 3.8.2 ...我试图找到一种方法来在身份验证失败时自定义json响应。

I am using a third party package Django OAuth Toolkit 我正在使用第三方软件包Django OAuth Toolkit

The only way I could think of is writing a custom authentication class 我能想到的唯一方法是编写自定义身份验证类

{ "detail": "Authentication credentials were not provided." }
{ "Failure": "Authentication credentials were not provided. xyz etc" }

My attempt at overwriting the BaseAuthorizationView 我试图覆盖BaseAuthorizationView

views.py views.py

from django.http import HttpResponse
from oauth2_provider.views.base import TokenView, BaseAuthorizationView
from django.utils.decorators import method_decorator
from django.views.decorators.debug import sensitive_post_parameters
from oauth2_provider.models import get_access_token_model, get_application_model


class CustomAuthorizationView(BaseAuthorizationView):
    def dispatch(self, request, *args, **kwargs):
        self.oauth2_data = {}
        return super().dispatch(request, *args, **kwargs)

    def error_response(self, error, application, **kwargs):
        """
        Handle errors either by redirecting to redirect_uri with a json in the body containing
        error details or providing an error response
        """
        redirect, error_response = super().error_response(error, **kwargs)

        if redirect:
            return self.redirect(error_response["url"], application)

        status = error_response["error"].status_code
        return self.render_to_response("hello", status=status)

urls.py urls.py

urlpatterns = [
...
    url(r"o/authorize/", appointmentViews.CustomAuthorizationView, name="authorize"),
    path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
...

Please let me know if I could provide more information! 如果我能提供更多信息,请告诉我! Thank you in advance. 先感谢您。

I ended up solving my problem with django rest, custom exception handling link 我最终用django rest,自定义异常处理链接解决了我的问题

views.py views.py

from rest_framework.views import exception_handler


def custom_exception_handler(exc, context):
    # Call REST framework's default exception handler first,
    # to get the standard error response.
    response = exception_handler(exc, context)

    if response is not None:
        response.data['status_code'] = response.status_code

    return response

settings.py settings.py

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'project.apps.utils.exception.custom_exception_handler'
} 

where project (folder) > apps (folder) > utils (folder) > exception.py > custom... 其中project(文件夹)> apps(文件夹)> utils(文件夹)> exception.py> custom ...

response: 响应:

{
    "detail": "Authentication credentials were not provided.",
    "status_code": 401
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django Rest Framework {“detail”:“未提供身份验证凭据。”} - Django Rest Framework {“detail”:“Authentication credentials were not provided.”} Django:“详细信息”:“未提供身份验证凭据。” - Django : “detail”: “Authentication credentials were not provided.” Django-rest-framework {“详细信息”:“未提供身份验证凭据。” } 使用 django-rest-knox - Django-rest-framework {“detail”: “Authentication credentials were not provided.” } using django-rest-knox Django Rest Framework JWT“未提供身份验证凭据。”} - Django Rest Framework JWT “Authentication credentials were not provided.”} DRF:“详细信息”:“未提供身份验证凭据。” - DRF: “detail”: “Authentication credentials were not provided.” Python 请求与 Django Rest 框架 - “详细信息”:“未提供身份验证凭据” - Python Requests with Django Rest Framework - 'detail': 'Authentication credentials were not provided' django rest API开发使用Swagger UI,有“详细信息”:“未提供身份验证凭据。” - django rest API development Using Swagger UI, got“detail”: “Authentication credentials were not provided.” Django Rest 框架 - 未提供身份验证凭据 - Django Rest Framework - Authentication credentials were not provided "detail": "未提供身份验证凭据。" 一般视图 - "detail": "Authentication credentials were not provided." for general views 禁止:/api/v1.0/user/create-user/ & {“detail”:“未提供身份验证凭据。” } DJANGO - Forbidden: /api/v1.0/user/create-user/ & { "detail": "Authentication credentials were not provided." } DJANGO
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM