mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-07-22 05:29:46 +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``
|
||||
|
||||
- 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``
|
||||
|
||||
- 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
|
||||
|
||||
|
||||
- **SIMPLE_LOGIN** - is simplified is used
|
|
@ -4,6 +4,7 @@ from rest_auth.serializers import (
|
|||
TokenSerializer as DefaultTokenSerializer,
|
||||
UserDetailsSerializer as DefaultUserDetailsSerializer,
|
||||
LoginSerializer as DefaultLoginSerializer,
|
||||
SimpleLoginSerializer as DefaultSimpleLoginSerializer,
|
||||
PasswordResetSerializer as DefaultPasswordResetSerializer,
|
||||
PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer,
|
||||
PasswordChangeSerializer as DefaultPasswordChangeSerializer)
|
||||
|
@ -23,6 +24,10 @@ LoginSerializer = import_callable(
|
|||
serializers.get('LOGIN_SERIALIZER', DefaultLoginSerializer)
|
||||
)
|
||||
|
||||
SimpleLoginSerializer = import_callable(
|
||||
serializers.get('SIMPLE_LOGIN_SERIALIZER', DefaultSimpleLoginSerializer)
|
||||
)
|
||||
|
||||
PasswordResetSerializer = import_callable(
|
||||
serializers.get(
|
||||
'PASSWORD_RESET_SERIALIZER',
|
||||
|
|
|
@ -14,6 +14,34 @@ from rest_framework.authtoken.models import Token
|
|||
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):
|
||||
username = serializers.CharField(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 rest_auth.views import (
|
||||
LoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
||||
LoginView, SimpleLoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
||||
PasswordResetView, PasswordResetConfirmView
|
||||
)
|
||||
|
||||
|
@ -14,7 +14,6 @@ urlpatterns = patterns(
|
|||
name='rest_password_reset'),
|
||||
url(r'^password/reset/confirm/$', PasswordResetConfirmView.as_view(),
|
||||
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.
|
||||
url(r'^logout/$', LogoutView.as_view(), name='rest_logout'),
|
||||
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'),
|
||||
)
|
||||
|
||||
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 .app_settings import (
|
||||
TokenSerializer, UserDetailsSerializer, LoginSerializer,
|
||||
PasswordResetSerializer, PasswordResetConfirmSerializer,
|
||||
TokenSerializer, UserDetailsSerializer, SimpleLoginSerializer,
|
||||
LoginSerializer, PasswordResetSerializer, PasswordResetConfirmSerializer,
|
||||
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):
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user