mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-07-22 21:49:45 +03:00
Ability to use simplified login
This commit is contained in:
parent
04136c6e35
commit
825b7c8def
|
@ -8,6 +8,8 @@ Configuration
|
||||||
|
|
||||||
- LOGIN_SERIALIZER - serializer class in ``rest_auth.views.LoginView``, default value ``rest_auth.serializers.LoginSerializer``
|
- LOGIN_SERIALIZER - serializer class in ``rest_auth.views.LoginView``, default value ``rest_auth.serializers.LoginSerializer``
|
||||||
|
|
||||||
|
- SIMPLE_LOGIN_SERIALIZER - serializer class in ``rest_auth.views.SimpleLoginView``, default value ``rest_auth.serializers.SimpleLoginSerializer``
|
||||||
|
|
||||||
- TOKEN_SERIALIZER - response for successful authentication in ``rest_auth.views.LoginView``, default value ``rest_auth.serializers.TokenSerializer``
|
- TOKEN_SERIALIZER - response for successful authentication in ``rest_auth.views.LoginView``, default value ``rest_auth.serializers.TokenSerializer``
|
||||||
|
|
||||||
- USER_DETAILS_SERIALIZER - serializer class in ``rest_auth.views.UserDetailsView``, default value ``rest_auth.serializers.UserDetailsSerializer``
|
- USER_DETAILS_SERIALIZER - serializer class in ``rest_auth.views.UserDetailsView``, default value ``rest_auth.serializers.UserDetailsSerializer``
|
||||||
|
@ -40,3 +42,6 @@ Configuration
|
||||||
|
|
||||||
|
|
||||||
- **USER_DETAILS_INCLUDED** - is user details urls are needed
|
- **USER_DETAILS_INCLUDED** - is user details urls are needed
|
||||||
|
|
||||||
|
|
||||||
|
- **SIMPLE_LOGIN** - is simplified is used
|
|
@ -4,6 +4,7 @@ from rest_auth.serializers import (
|
||||||
TokenSerializer as DefaultTokenSerializer,
|
TokenSerializer as DefaultTokenSerializer,
|
||||||
UserDetailsSerializer as DefaultUserDetailsSerializer,
|
UserDetailsSerializer as DefaultUserDetailsSerializer,
|
||||||
LoginSerializer as DefaultLoginSerializer,
|
LoginSerializer as DefaultLoginSerializer,
|
||||||
|
SimpleLoginSerializer as DefaultSimpleLoginSerializer,
|
||||||
PasswordResetSerializer as DefaultPasswordResetSerializer,
|
PasswordResetSerializer as DefaultPasswordResetSerializer,
|
||||||
PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer,
|
PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer,
|
||||||
PasswordChangeSerializer as DefaultPasswordChangeSerializer)
|
PasswordChangeSerializer as DefaultPasswordChangeSerializer)
|
||||||
|
@ -23,6 +24,10 @@ LoginSerializer = import_callable(
|
||||||
serializers.get('LOGIN_SERIALIZER', DefaultLoginSerializer)
|
serializers.get('LOGIN_SERIALIZER', DefaultLoginSerializer)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SimpleLoginSerializer = import_callable(
|
||||||
|
serializers.get('SIMPLE_LOGIN_SERIALIZER', DefaultSimpleLoginSerializer)
|
||||||
|
)
|
||||||
|
|
||||||
PasswordResetSerializer = import_callable(
|
PasswordResetSerializer = import_callable(
|
||||||
serializers.get(
|
serializers.get(
|
||||||
'PASSWORD_RESET_SERIALIZER',
|
'PASSWORD_RESET_SERIALIZER',
|
||||||
|
|
|
@ -14,6 +14,34 @@ from rest_framework.authtoken.models import Token
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleLoginSerializer(serializers.Serializer):
|
||||||
|
username = serializers.CharField()
|
||||||
|
password = serializers.CharField(style={'input_type': 'password'})
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
username = attrs.get('username')
|
||||||
|
password = attrs.get('password')
|
||||||
|
|
||||||
|
if username and password:
|
||||||
|
user = authenticate(username=username, password=password)
|
||||||
|
|
||||||
|
else:
|
||||||
|
msg = _('Must include "username" and "password".')
|
||||||
|
raise exceptions.ValidationError(msg)
|
||||||
|
|
||||||
|
# Did we get back an active user?
|
||||||
|
if user:
|
||||||
|
if not user.is_active:
|
||||||
|
msg = _('User account is disabled.')
|
||||||
|
raise exceptions.ValidationError(msg)
|
||||||
|
else:
|
||||||
|
msg = _('Unable to log in with provided credentials.')
|
||||||
|
raise exceptions.ValidationError(msg)
|
||||||
|
|
||||||
|
attrs['user'] = user
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
class LoginSerializer(serializers.Serializer):
|
class LoginSerializer(serializers.Serializer):
|
||||||
username = serializers.CharField(required=False, allow_blank=True)
|
username = serializers.CharField(required=False, allow_blank=True)
|
||||||
email = serializers.EmailField(required=False, allow_blank=True)
|
email = serializers.EmailField(required=False, allow_blank=True)
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.conf.urls import patterns, url
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from rest_auth.views import (
|
from rest_auth.views import (
|
||||||
LoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
LoginView, SimpleLoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
||||||
PasswordResetView, PasswordResetConfirmView
|
PasswordResetView, PasswordResetConfirmView
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ urlpatterns = patterns(
|
||||||
name='rest_password_reset'),
|
name='rest_password_reset'),
|
||||||
url(r'^password/reset/confirm/$', PasswordResetConfirmView.as_view(),
|
url(r'^password/reset/confirm/$', PasswordResetConfirmView.as_view(),
|
||||||
name='rest_password_reset_confirm'),
|
name='rest_password_reset_confirm'),
|
||||||
url(r'^login/$', LoginView.as_view(), name='rest_login'),
|
|
||||||
# URLs that require a user to be logged in with a valid session / token.
|
# URLs that require a user to be logged in with a valid session / token.
|
||||||
url(r'^logout/$', LogoutView.as_view(), name='rest_logout'),
|
url(r'^logout/$', LogoutView.as_view(), name='rest_logout'),
|
||||||
url(r'^password/change/$', PasswordChangeView.as_view(),
|
url(r'^password/change/$', PasswordChangeView.as_view(),
|
||||||
|
@ -26,3 +25,14 @@ if getattr(settings, 'USER_DETAILS_INCLUDED', True):
|
||||||
'',
|
'',
|
||||||
url(r'^user/$', UserDetailsView.as_view(), name='rest_user_details'),
|
url(r'^user/$', UserDetailsView.as_view(), name='rest_user_details'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if getattr(settings, 'SIMPLE_LOGIN', False):
|
||||||
|
urlpatterns += patterns(
|
||||||
|
'',
|
||||||
|
url(r'^login/$', SimpleLoginView.as_view(), name='rest_login'),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
urlpatterns += patterns(
|
||||||
|
'',
|
||||||
|
url(r'^login/$', LoginView.as_view(), name='rest_login'),
|
||||||
|
)
|
|
@ -10,11 +10,41 @@ from rest_framework.authtoken.models import Token
|
||||||
from rest_framework.generics import RetrieveUpdateAPIView
|
from rest_framework.generics import RetrieveUpdateAPIView
|
||||||
|
|
||||||
from .app_settings import (
|
from .app_settings import (
|
||||||
TokenSerializer, UserDetailsSerializer, LoginSerializer,
|
TokenSerializer, UserDetailsSerializer, SimpleLoginSerializer,
|
||||||
PasswordResetSerializer, PasswordResetConfirmSerializer,
|
LoginSerializer, PasswordResetSerializer, PasswordResetConfirmSerializer,
|
||||||
PasswordChangeSerializer
|
PasswordChangeSerializer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class SimpleLoginView(GenericAPIView):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Check the credentials and authenticated if the credentials are valid .
|
||||||
|
Calls Django Auth login method to register User ID
|
||||||
|
in Django session framework
|
||||||
|
|
||||||
|
Accept the following POST parameters: username, password
|
||||||
|
"""
|
||||||
|
permission_classes = (AllowAny,)
|
||||||
|
serializer_class = SimpleLoginSerializer
|
||||||
|
|
||||||
|
def login(self):
|
||||||
|
self.user = self.serializer.validated_data['user']
|
||||||
|
|
||||||
|
if getattr(settings, 'REST_SESSION_LOGIN', True):
|
||||||
|
login(self.request, self.user)
|
||||||
|
|
||||||
|
def get_error_response(self):
|
||||||
|
return Response(
|
||||||
|
self.serializer.errors, status=status.HTTP_400_BAD_REQUEST
|
||||||
|
)
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
self.serializer = self.get_serializer(data=self.request.data)
|
||||||
|
if not self.serializer.is_valid():
|
||||||
|
return self.get_error_response()
|
||||||
|
self.login()
|
||||||
|
return Response({}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
class LoginView(GenericAPIView):
|
class LoginView(GenericAPIView):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user