Настройка ответа аутентификации Django rest framework {"detail": "Учетные данные аутентификации не предоставлены".} - PullRequest
0 голосов
/ 11 июня 2019

Я использую django 2.1 и python 3.6 и django rest framework 3.8.2 ... Я пытаюсь найти способ настроить ответ json, когда аутентификация не удалась.

Я использую сторонний пакет Django OAuth Toolkit

Единственный способ, которым я мог придумать, - написать собственный класс аутентификации

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

Моя попытка перезаписи BaseAuthorizationView

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

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

Пожалуйста, дайте мне знать, если бы я мог предоставить больше информации! Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2019

Я решил свою проблему с помощью django rest, пользовательской обработки исключений ссылка

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

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

где проект (папка)> apps (папка)> utils (папка)> exception.py> custom ...

ответ:

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