mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-07-03 18:53:04 +03:00
Knox Login/Logout
Rather than using the Knox views themselves, to respect Session and GET settings, and because Knox logout signal shouldn't be triggered
This commit is contained in:
parent
b6c267cafc
commit
0db8c0dd95
|
@ -24,6 +24,12 @@ from .app_settings import (
|
||||||
from .models import TokenModel
|
from .models import TokenModel
|
||||||
from .utils import jwt_encode
|
from .utils import jwt_encode
|
||||||
|
|
||||||
|
if getattr(settings, 'REST_USE_KNOX', False):
|
||||||
|
try:
|
||||||
|
from knox.auth import TokenAuthentication as KnoxTokenAuthentication
|
||||||
|
except ImportError:
|
||||||
|
raise ImportError("Install django-rest-knox to use REST_USE_KNOX = True")
|
||||||
|
|
||||||
sensitive_post_parameters_m = method_decorator(
|
sensitive_post_parameters_m = method_decorator(
|
||||||
sensitive_post_parameters(
|
sensitive_post_parameters(
|
||||||
'password', 'old_password', 'new_password1', 'new_password2'
|
'password', 'old_password', 'new_password1', 'new_password2'
|
||||||
|
@ -55,6 +61,8 @@ class LoginView(GenericAPIView):
|
||||||
def get_response_serializer(self):
|
def get_response_serializer(self):
|
||||||
if getattr(settings, 'REST_USE_JWT', False):
|
if getattr(settings, 'REST_USE_JWT', False):
|
||||||
response_serializer = JWTSerializer
|
response_serializer = JWTSerializer
|
||||||
|
elif getattr(settings, 'REST_USE_KNOX', False):
|
||||||
|
response_serializer = KnoxTokenSerializer
|
||||||
else:
|
else:
|
||||||
response_serializer = TokenSerializer
|
response_serializer = TokenSerializer
|
||||||
return response_serializer
|
return response_serializer
|
||||||
|
@ -81,6 +89,12 @@ class LoginView(GenericAPIView):
|
||||||
}
|
}
|
||||||
serializer = serializer_class(instance=data,
|
serializer = serializer_class(instance=data,
|
||||||
context={'request': self.request})
|
context={'request': self.request})
|
||||||
|
elif getattr(settings, 'REST_USE_KNOX', False):
|
||||||
|
data = {
|
||||||
|
'token': self.token
|
||||||
|
}
|
||||||
|
serializer = serializer_class(instance=data,
|
||||||
|
context={'request': self.request})
|
||||||
else:
|
else:
|
||||||
serializer = serializer_class(instance=self.token,
|
serializer = serializer_class(instance=self.token,
|
||||||
context={'request': self.request})
|
context={'request': self.request})
|
||||||
|
@ -103,7 +117,11 @@ class LogoutView(APIView):
|
||||||
|
|
||||||
Accepts/Returns nothing.
|
Accepts/Returns nothing.
|
||||||
"""
|
"""
|
||||||
permission_classes = (AllowAny,)
|
if getattr(settings, 'REST_USE_KNOX', False):
|
||||||
|
authentication_classes = (KnoxTokenAuthentication,)
|
||||||
|
permission_classes = (IsAuthenticated,)
|
||||||
|
else:
|
||||||
|
permission_classes = (AllowAny,)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if getattr(settings, 'ACCOUNT_LOGOUT_ON_GET', False):
|
if getattr(settings, 'ACCOUNT_LOGOUT_ON_GET', False):
|
||||||
|
@ -117,10 +135,13 @@ class LogoutView(APIView):
|
||||||
return self.logout(request)
|
return self.logout(request)
|
||||||
|
|
||||||
def logout(self, request):
|
def logout(self, request):
|
||||||
try:
|
if getattr(settings, 'REST_USE_KNOX', False):
|
||||||
request.user.auth_token.delete()
|
request._auth.delete()
|
||||||
except (AttributeError, ObjectDoesNotExist):
|
else:
|
||||||
pass
|
try:
|
||||||
|
request.user.auth_token.delete()
|
||||||
|
except (AttributeError, ObjectDoesNotExist):
|
||||||
|
pass
|
||||||
|
|
||||||
django_logout(request)
|
django_logout(request)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user