JSON: API с django-rest-framework-json-api и JWT - PullRequest
0 голосов
/ 24 ноября 2018

Я подумал, что было бы неплохо использовать стандартный JSON: API для моего нового проекта.К сожалению, я сразу не смог заставить работать аутентификацию JWT.Моя настройка:

  • Django
  • JEST Framework REST
  • REST Framework JWT Auth
  • Django REST Framework JSON API

Если я получу ОПЦИИ для моего пути авторизации:

{
    "data": {
        "name": "Obtain Json Web Token",
        "description": "API View that receives a POST with a user's username and password.\n\nReturns a JSON Web Token that can be used for authenticated requests.",
        "renders": [
            "application/vnd.api+json",
            "text/html"
        ],
        "parses": [
            "application/vnd.api+json",
            "application/x-www-form-urlencoded",
            "multipart/form-data"
        ],
        "allowed_methods": [
            "POST",
            "OPTIONS"
        ],
        "actions": {
            "POST": {
                "username": {
                    "type": "String",
                    "required": true,
                    "read_only": false,
                    "write_only": false,
                    "label": "Username"
                },
                "password": {
                    "type": "String",
                    "required": true,
                    "read_only": false,
                    "write_only": true,
                    "label": "Password"
                }
            }
        }
    }
}

Если я тогда попытаюсь наивно POST с Content-Type: application / vnd.api + json:

{
    "data": {
        "user": "user1",
        "password": "supersecretpw"
    }
}

Iget 409 Conflict response:

{
    "errors": [
        {
            "detail": "The resource object's type (None) is not the type that constitute the collection represented by the endpoint (ObtainJSONWebToken).",
            "source": {
                "pointer": "/data"
            },
            "status": "409"
        }
    ]
}

Как я могу либо получить токен правильно, либо правильно использовать вышеупомянутые пакеты?

1 Ответ

0 голосов
/ 25 ноября 2018

Ваша полезная нагрузка не является допустимым документом JSON API.Он должен иметь объект ресурса или коллекцию объектов ресурса на ключе data.Объект ресурса должен иметь id и type членов.Атрибуты должны быть представлены в виде атрибута объекта на ключе attributes.

Обнаруженная ошибка, по-видимому, связана с отсутствующим элементом type.Поэтому он принимает тип None, который «не является типом, составляющим коллекцию, представленную конечной точкой».Последняя часть, по-видимому, относится к реализации Django REST Framework JSON API .

Обратите внимание, что спецификация JSON API не зависит от аутентификации, поэтому она зависит от вашей реализации.Вам не нужно использовать объект ресурса JSON API для представления учетных данных.Часто JSON API не используется для конечных точек, связанных с аутентификацией, потому что стандарты для аутентификации реализованы или установленные соглашения предлагают другую структуру полезной нагрузки для этих конечных точек.

...