mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-03-12 13:25:46 +03:00
Merge pull request #144 from caruccio/custom-token
Add support for custom Token model
This commit is contained in:
commit
f9547f62e8
|
@ -36,11 +36,12 @@ Configuration
|
||||||
|
|
||||||
- REGISTER_SERIALIZER - serializer class in ``rest_auth.register.views.RegisterView``, default value ``rest_auth.register.serializers.RegisterSerializer``
|
- REGISTER_SERIALIZER - serializer class in ``rest_auth.register.views.RegisterView``, default value ``rest_auth.register.serializers.RegisterSerializer``
|
||||||
|
|
||||||
|
- **REST_AUTH_TOKEN_MODEL** - model class for tokens, default value ``rest_framework.authtoken.models``
|
||||||
|
|
||||||
|
- **REST_AUTH_TOKEN_CREATOR** - callable to create tokens, default value ``rest_auth.utils.default_create_token``.
|
||||||
|
|
||||||
- **REST_SESSION_LOGIN** - Enable session login in Login API view (default: True)
|
- **REST_SESSION_LOGIN** - Enable session login in Login API view (default: True)
|
||||||
|
|
||||||
|
|
||||||
- **OLD_PASSWORD_FIELD_ENABLED** - set it to True if you want to have old password verification on password change enpoint (default: False)
|
- **OLD_PASSWORD_FIELD_ENABLED** - set it to True if you want to have old password verification on password change enpoint (default: False)
|
||||||
|
|
||||||
- **LOGOUT_ON_PASSWORD_CHANGE** - set to False if you want to keep the current user logged in after a password change
|
- **LOGOUT_ON_PASSWORD_CHANGE** - set to False if you want to keep the current user logged in after a password change
|
||||||
|
|
|
@ -7,8 +7,10 @@ from rest_auth.serializers import (
|
||||||
PasswordResetSerializer as DefaultPasswordResetSerializer,
|
PasswordResetSerializer as DefaultPasswordResetSerializer,
|
||||||
PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer,
|
PasswordResetConfirmSerializer as DefaultPasswordResetConfirmSerializer,
|
||||||
PasswordChangeSerializer as DefaultPasswordChangeSerializer)
|
PasswordChangeSerializer as DefaultPasswordChangeSerializer)
|
||||||
from .utils import import_callable
|
from .utils import import_callable, default_create_token
|
||||||
|
|
||||||
|
create_token = import_callable(
|
||||||
|
getattr(settings, 'REST_AUTH_TOKEN_CREATOR', default_create_token))
|
||||||
|
|
||||||
serializers = getattr(settings, 'REST_AUTH_SERIALIZERS', {})
|
serializers = getattr(settings, 'REST_AUTH_SERIALIZERS', {})
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
# from django.db import models
|
from django.conf import settings
|
||||||
|
|
||||||
|
from rest_framework.authtoken.models import Token as DefaultTokenModel
|
||||||
|
|
||||||
|
from .utils import import_callable
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
|
||||||
|
TokenModel = import_callable(
|
||||||
|
getattr(settings, 'REST_AUTH_TOKEN_MODEL', DefaultTokenModel))
|
||||||
|
|
|
@ -3,23 +3,25 @@ from rest_framework.response import Response
|
||||||
from rest_framework.permissions import AllowAny
|
from rest_framework.permissions import AllowAny
|
||||||
from rest_framework.generics import CreateAPIView
|
from rest_framework.generics import CreateAPIView
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.authtoken.models import Token
|
|
||||||
from rest_framework.exceptions import MethodNotAllowed
|
from rest_framework.exceptions import MethodNotAllowed
|
||||||
|
|
||||||
from allauth.account.views import ConfirmEmailView
|
from allauth.account.views import ConfirmEmailView
|
||||||
from allauth.account.utils import complete_signup
|
from allauth.account.utils import complete_signup
|
||||||
from allauth.account import app_settings as allauth_settings
|
from allauth.account import app_settings as allauth_settings
|
||||||
|
|
||||||
from rest_auth.app_settings import TokenSerializer
|
from rest_auth.app_settings import (TokenSerializer,
|
||||||
|
create_token)
|
||||||
from rest_auth.registration.serializers import (SocialLoginSerializer,
|
from rest_auth.registration.serializers import (SocialLoginSerializer,
|
||||||
VerifyEmailSerializer)
|
VerifyEmailSerializer)
|
||||||
from .app_settings import RegisterSerializer
|
|
||||||
from rest_auth.views import LoginView
|
from rest_auth.views import LoginView
|
||||||
|
from rest_auth.models import TokenModel
|
||||||
|
from .app_settings import RegisterSerializer
|
||||||
|
|
||||||
|
|
||||||
class RegisterView(CreateAPIView):
|
class RegisterView(CreateAPIView):
|
||||||
serializer_class = RegisterSerializer
|
serializer_class = RegisterSerializer
|
||||||
permission_classes = (AllowAny, )
|
permission_classes = (AllowAny, )
|
||||||
|
token_model = TokenModel
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
serializer = self.get_serializer(data=request.data)
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
@ -32,7 +34,7 @@ class RegisterView(CreateAPIView):
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
user = serializer.save(self.request)
|
user = serializer.save(self.request)
|
||||||
Token.objects.get_or_create(user=user)
|
create_token(self.token_model, user, serializer)
|
||||||
complete_signup(self.request._request, user,
|
complete_signup(self.request._request, user,
|
||||||
allauth_settings.EMAIL_VERIFICATION,
|
allauth_settings.EMAIL_VERIFICATION,
|
||||||
None)
|
None)
|
||||||
|
|
|
@ -6,8 +6,9 @@ from django.utils.http import urlsafe_base64_decode as uid_decoder
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_text
|
||||||
|
|
||||||
|
from .models import TokenModel
|
||||||
|
|
||||||
from rest_framework import serializers, exceptions
|
from rest_framework import serializers, exceptions
|
||||||
from rest_framework.authtoken.models import Token
|
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
# Get the UserModel
|
# Get the UserModel
|
||||||
|
@ -114,7 +115,7 @@ class TokenSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Token
|
model = TokenModel
|
||||||
fields = ('key',)
|
fields = ('key',)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,8 @@ def import_callable(path_or_callable):
|
||||||
assert isinstance(path_or_callable, string_types)
|
assert isinstance(path_or_callable, string_types)
|
||||||
package, attr = path_or_callable.rsplit('.', 1)
|
package, attr = path_or_callable.rsplit('.', 1)
|
||||||
return getattr(import_module(package), attr)
|
return getattr(import_module(package), attr)
|
||||||
|
|
||||||
|
|
||||||
|
def default_create_token(token_model, user, serializer):
|
||||||
|
token, _ = token_model.objects.get_or_create(user=user)
|
||||||
|
return token
|
||||||
|
|
|
@ -7,14 +7,14 @@ from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.generics import GenericAPIView
|
from rest_framework.generics import GenericAPIView
|
||||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
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, LoginSerializer,
|
||||||
PasswordResetSerializer, PasswordResetConfirmSerializer,
|
PasswordResetSerializer, PasswordResetConfirmSerializer,
|
||||||
PasswordChangeSerializer
|
PasswordChangeSerializer, create_token
|
||||||
)
|
)
|
||||||
|
from .models import TokenModel
|
||||||
|
|
||||||
|
|
||||||
class LoginView(GenericAPIView):
|
class LoginView(GenericAPIView):
|
||||||
|
@ -30,13 +30,12 @@ class LoginView(GenericAPIView):
|
||||||
"""
|
"""
|
||||||
permission_classes = (AllowAny,)
|
permission_classes = (AllowAny,)
|
||||||
serializer_class = LoginSerializer
|
serializer_class = LoginSerializer
|
||||||
token_model = Token
|
token_model = TokenModel
|
||||||
response_serializer = TokenSerializer
|
response_serializer = TokenSerializer
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
self.user = self.serializer.validated_data['user']
|
self.user = self.serializer.validated_data['user']
|
||||||
self.token, created = self.token_model.objects.get_or_create(
|
self.token = create_token(self.token_model, self.user, self.serializer)
|
||||||
user=self.user)
|
|
||||||
if getattr(settings, 'REST_SESSION_LOGIN', True):
|
if getattr(settings, 'REST_SESSION_LOGIN', True):
|
||||||
login(self.request, self.user)
|
login(self.request, self.user)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user