auth.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.contrib import auth
  2. from django.views.decorators.cache import never_cache
  3. from django.views.decorators.csrf import csrf_protect
  4. from django.views.decorators.debug import sensitive_post_parameters
  5. from rest_framework import status
  6. from rest_framework.decorators import api_view
  7. from rest_framework.response import Response
  8. from misago.users.decorators import deny_authenticated, deny_banned_ips
  9. from misago.users.forms.auth import AuthenticationForm
  10. from misago.users.serializers import AuthenticatedUserSerializer
  11. @sensitive_post_parameters()
  12. @api_view(['POST'])
  13. @never_cache
  14. @deny_authenticated
  15. @csrf_protect
  16. @deny_banned_ips
  17. def login(request):
  18. form = AuthenticationForm(request, data=request.data)
  19. if form.is_valid():
  20. auth.login(request, form.user_cache)
  21. return Response(AuthenticatedUserSerializer(form.user_cache).data)
  22. else:
  23. error = form.errors.as_data()['__all__'][0]
  24. return Response({
  25. 'detail': error.messages[0],
  26. 'code': error.code
  27. }, status=status.HTTP_400_BAD_REQUEST)
  28. @api_view(['GET', 'POST'])
  29. def user(request):
  30. if request.user.is_authenticated():
  31. return Response(AuthenticatedUserSerializer(request.user).data)
  32. else:
  33. return Response({'id': None})