Django-Rest-Knox предоставляет представление, чтобы дать вам токен для аутентификации, но это представление требует аутентификации:
https://github.com/James1345/django-rest-knox/blob/05f218f1922999d1be76753076cf8af78f134e02/knox/views.py#L16
Как это предполагается использовать?
Следуя документации по настройке , мои настройки выглядят так:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication',),
}
Я пытался аутентифицироваться следующим образом:
fetch("http://localhost:8000/api-v1/auth/login/", {
method: "POST",
body: JSON.stringify({email: email, password: password}),
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
}
}).then(result => result.json())
.then(result => {
console.log(result);
});
но IsAuthenticated
останавливает меня и показывает это сообщение:
Unauthorized: /api-v1/auth/login/
на стороне Django, и это на стороне JavaScript:
{"detail":"Authentication credentials were not provided."}
Адрес электронной почты и пароль те же, что я используючтобы успешно войти в систему с помощью инструмента администратора.
Просто для пояснения, у меня нет системы, в которой кто-то входит в веб-приложение, копирует и вставляет токен в другое приложение.В системе, которую я создаю, вы авторизуетесь напрямую через API с вашим именем пользователя и паролем, затем токен будет получен и сохранен для последующих запросов.
Очень похоже на то, как работает LastPass, что вы в первый разоткройте его, он попросит у вас адрес электронной почты и пароль (чтобы не идти и не получить токен с веб-сайта):
Вся цельLoginView от Knox состоит в том, чтобы генерировать и предоставлять этот токен в запросе API: https://github.com/James1345/django-rest-knox/blob/05f218f1922999d1be76753076cf8af78f134e02/knox/views.py#L30-L55
Это также то, насколько хорошо работает каждое мобильное приложение, а также SPA, в котором они запрашивают у вас пользователя / электронную почту ипароль для получения токена, а затем сохраните токен для дальнейших запросов.