Django: Создание вручную сессионного cookie и последующая аутентификация с его помощью
Я использую Django-Rest-Framework с аутентификацией токенами. В моем приложении для Android я хочу открыть webview и отобразить некоторое содержимое из представления, которое требует аутентификации.
Из-за этого я написал вызов rest для получения идентификатора сессии.
/rest/getsessionid/ => выглядит следующим образом:
from django.contrib.sessions.backends.db import SessionStore
class GetSessionKeyView(APIView):
def get(self, request, format=None):
if request.user.is_authenticated:
s = SessionStore()
s.create()
return Response({'sessionid': s.session_key})
return Response({'notauthenicated': True})
К сожалению, возвращенный sessionid не работает. Почему?
Я наконец-то нашел способ.
class GetSessionKeyView(APIView):
def get(self, request, format=None):
if request.user.is_authenticated:
if 'HTTP_COOKIE' not in request.META or request.META['HTTP_COOKIE'] == '':
login(request, request.user, backend='django.contrib.auth.backends.ModelBackend')
return Response({
'sessionid': request.session.session_key
})
else:
return Response({'ERROR': 'Cookies not allowed'})
return Response({'notauthenicated': True})
Для создания сеанса необходимо снова войти в систему.
EDIT: Не забудьте заблокировать cookies для защиты от CSRF-атак.