#javascript #python #django #authentication #django-rest-framework
#javascript #python #django #аутентификация #django-rest-framework
Вопрос:
Я новичок в Django и создал базовое приложение (Django 3.1), которое использует аутентификацию сеанса и простую страницу входа (имя пользователя пароль) для входа пользователя django. Все работает нормально. Я хотел бы использовать javascript (vue.js ) на страницах, доступных зарегистрированному пользователю для вызова API Django REST, размещенных в том же приложении Django.
Несмотря на множество поисковых запросов, никто, похоже, не приводит четкого примера аутентификации гибридного приложения Django, дополненного API. Я уже использовал множество API, поэтому знаком с параметрами аутентификации. Моя проблема заключается в том, как безопасно получить учетные данные для javascript, загруженного шаблонами django.
В идеале я хотел бы:
- Пользователь входит в систему с именем пользователя / паролем
- django перенаправляет на СТРАНИЦУ B, АВТОМАТИЧЕСКИ КАКИМ-ТО ОБРАЗОМ вставляя токен пользователя в cookie / sessionStorage
- Функция javascript на СТРАНИЦЕ B получает учетные данные из cookie / sessionStorage и вызывает API (используя все различные опции, поддерживаемые django-rest-framework)
Мои вопросы:
Вопрос 1 ==> в моей функции просмотра do_login (ниже) после успешной аутентификации с помощью встроенного в Djangos метода входа в систему, нужно ли мне создавать cookie в HttpResponse (например, token = XXXXXXX), чтобы javascript мог получить к нему доступ? Безопасно ли это?
def do_login(request):
....
login(request, user)
...
#create token here and return to user somehow in cookie/sessionStorage
return render(request, 'hello/logged_in_ok.html')
Итак, мой javascript может делать что-то вроде этого (только демонстрационный код):
function onButtonClick(){
let token = sesssionStorage.getItem("django_gave_me_this_token");
let response = callGetAPISomehow(token, "https://demo/rest/api/account/1")
.....
}
Вопрос 2 ==> Большинство методов просмотра заканчиваются:
return render(request, 'blah/blah.html', {'data': blah})
Как мне установить cookie в ответе таким образом? Нет объекта ответа для доступа.
Любая помощь приветствуется
Комментарии:
1. Используете ли вы фреймворк Django REST? Если вы используете конфигурацию сеансов Django по умолчанию, сеансы через AJAX должны работать «из коробки» (см. Документы: django-rest-framework.org/topics/ajax-csrf-cors )
2. Да, платформа Django REST