Как получить cookies (в основном мне нужен jwt-токен) в Ember.js, которые были установлены в Django?
Django Rest Framework
class LoginView(APIView):
password = request.data['password']
user = User.objects.filter(email=request.data['email']).first()
if user is None:
return Response({
'success': False,
'message': 'Username or password is invalid',
'errors': 'Username or password is invalid',
}, status=status.HTTP_401_UNAUTHORIZED)
if not user.check_password(password):
return Response({
'success': False,
'message': 'Username or password is invalid',
'errors': {'username-or-password': ['Username or password is invalid']},
}, status=status.HTTP_401_UNAUTHORIZED)
payload = {
'id': user.id,
'iat': datetime.datetime.utcnow()
}
token = jwt.encode(payload, 'secret', algorithm='HS256')
response = Response()
response.set_cookie(key='token', value=token, httponly=True)
response.data = {
'success': True,
'data': {
'token': token
}
}
return response
Здесь я отправляю токен в данных ответа, а также устанавливаю токен в cookies.
Как я могу получить/принять/извлечь токен из cookies в Ember.js?
Установив значение httponly
на true
, вы блокируете доступ к этому cookie от javascript. Поэтому вам нужно будет изменить это значение на стороне Django, однако это может быть проблемой безопасности, и вы захотите исследовать ее для вашего случая использования. Если вы решите пойти этим путем, вы можете получить доступ к значению cookie в Ember.js, используя API javascript Document.cookie как allCookies = document.cookie;
.
В качестве альтернативы, если вы не хотите передавать cookie другим скриптам, вы можете добавить URL конечной точки yoursite.com/api/whoami
в ваш бэкэнд, который будет отвечать на запрос JWT
для текущего аутентифицированного пользователя.