Как взаимодействовать с REST API, созданным с помощью DRF - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь использовать API-интерфейс REST, созданный с помощью django REST Framework, для отправки данных в мое собственное приложение. Для аутентификации я использую allauth, который создает авторизацию при создании пользователя. Моя проблема: я не знаю, что делать дальше (как только у меня есть токен). Я хочу иметь возможность получать данные моего пользователя с помощью API, но я не знаю, как обрабатывать аутентификацию с помощью DRF.

Нужно ли отправлять токен каждый раз, когда я делаю запрос? Если да, что бы хотел JSON? (внешний интерфейс с реагировать на родной)

Как отправить данные обратно? Будет ли это выглядеть так:

def sendUsername(request):
    return request.user.get_username()

если не как? и если да, то это выглядит не очень безопасно, так есть ли способ сделать его хоть немного более безопасным?

Я действительно новичок в этом, так что извините, если это выглядит глупо.

Спасибо, что уделили время.

Ответы [ 2 ]

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

В этом случае можно действовать двумя способами. Для одного вы должны создать authtoken/ url, который возвращает токен аутентификации для текущего пользователя. Вы храните токен в браузере. Одно из мест для хранения токена находится в window.localStorage. При создании остальных API в django вы должны были предоставить им различные разрешения django. Таким образом, для тех, чье разрешение AllowAny, аутентификация не требуется, но для тех, чье разрешение IsAuthenticated, вы должны отправить токен в заголовках при выполнении любого запроса API к данному API.

Декодирование основано на типе токена. Если вы используете rest_framework_auth, в этом случае декодирование токена выполняется внутри, чтобы реализовать пароль для аутентификации пользователя. Если вы решили использовать аутентификацию на основе jwt, вы можете написать пользовательскую веб-аутентификацию, которая использует алгоритмы jwt и sha1 для кодирования и декодирования пароля соответственно. Если вы хотите получить более подробную информацию об аутентификации jwt, вы можете проверить https://thinkster.io/tutorials/django-json-api/authentication.

Данный метод имеет свои недостатки, поскольку любой, кто получает доступ к вашему токену, может легко его расшифровать, чтобы найти пароль. Таким образом, обычной практикой является использование соли в качестве дополнительного фактора для создания авторизованного токена. Таким образом, после однократного кодирования заданного пароля происходит другое кодирование, которое происходит с солью, и затем оно сохраняется в веб-интерфейсе. Это гарантирует, что токен, присутствующий во внешнем интерфейсе, не может быть декодирован любым, кто имеет к нему доступ, и только теми, кто имеет доступ и к соли, которая хранится для каждого пользователя в базе данных.

Понятие солей входит в картину, когда вы используете аутентификацию jwt. Там пароль сохраняется как «пароль + соль + ключ общего доступа», ключ общего доступа остается уникальным для базы данных, а соль остается уникальным для поля модели. Это гарантирует, что пароль трудно взломать. Вышеуказанная комбинация затем кодируется через jwt.

0 голосов

Я сделал нечто подобное с DRF, но без React, может быть, я дам вам представление о том, как действовать

Backend 1.- Создайте конечную точку для входа 1.1.- Обновить токен пользователя 1.2.- токен пользователя 2.- Защитите API, чтобы он не мог принимать запросы без токена

Frontend 1.- Сохраните токен пользователя в localStorage 2.- Сделайте все запросы с токеном пользователя

Дополнительно: Если вам нужно, вы можете создать Middleware для управления методом аутентификации

...