mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-02-07 05:30:33 +03:00
made compatible with django-4.0
This commit is contained in:
parent
3c36004c44
commit
1e760cbef9
|
@ -1,5 +1,5 @@
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -54,7 +54,8 @@ class SocialLoginSerializer(serializers.Serializer):
|
||||||
`allauth.socialaccount.SocialLoginView` instance
|
`allauth.socialaccount.SocialLoginView` instance
|
||||||
"""
|
"""
|
||||||
request = self._get_request()
|
request = self._get_request()
|
||||||
social_login = adapter.complete_login(request, app, token, response=response)
|
social_login = adapter.complete_login(
|
||||||
|
request, app, token, response=response)
|
||||||
social_login.token = token
|
social_login.token = token
|
||||||
return social_login
|
return social_login
|
||||||
|
|
||||||
|
@ -69,7 +70,8 @@ class SocialLoginSerializer(serializers.Serializer):
|
||||||
|
|
||||||
adapter_class = getattr(view, 'adapter_class', None)
|
adapter_class = getattr(view, 'adapter_class', None)
|
||||||
if not adapter_class:
|
if not adapter_class:
|
||||||
raise serializers.ValidationError(_("Define adapter_class in view"))
|
raise serializers.ValidationError(
|
||||||
|
_("Define adapter_class in view"))
|
||||||
|
|
||||||
adapter = adapter_class(request)
|
adapter = adapter_class(request)
|
||||||
app = adapter.get_provider().get_app(request)
|
app = adapter.get_provider().get_app(request)
|
||||||
|
@ -119,7 +121,8 @@ class SocialLoginSerializer(serializers.Serializer):
|
||||||
social_token.app = app
|
social_token.app = app
|
||||||
|
|
||||||
try:
|
try:
|
||||||
login = self.get_social_login(adapter, app, social_token, access_token)
|
login = self.get_social_login(
|
||||||
|
adapter, app, social_token, access_token)
|
||||||
complete_social_login(request, login)
|
complete_social_login(request, login)
|
||||||
except HTTPError:
|
except HTTPError:
|
||||||
raise serializers.ValidationError(_("Incorrect value"))
|
raise serializers.ValidationError(_("Incorrect value"))
|
||||||
|
@ -154,7 +157,8 @@ class SocialConnectMixin(object):
|
||||||
Refer to the implementation of get_social_login in base class and to the
|
Refer to the implementation of get_social_login in base class and to the
|
||||||
allauth.socialaccount.helpers module complete_social_login function.
|
allauth.socialaccount.helpers module complete_social_login function.
|
||||||
"""
|
"""
|
||||||
social_login = super(SocialConnectMixin, self).get_social_login(*args, **kwargs)
|
social_login = super(SocialConnectMixin,
|
||||||
|
self).get_social_login(*args, **kwargs)
|
||||||
social_login.state['process'] = AuthProcess.CONNECT
|
social_login.state['process'] = AuthProcess.CONNECT
|
||||||
return social_login
|
return social_login
|
||||||
|
|
||||||
|
@ -190,7 +194,8 @@ class RegisterSerializer(serializers.Serializer):
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
if data['password1'] != data['password2']:
|
if data['password1'] != data['password2']:
|
||||||
raise serializers.ValidationError(_("The two password fields didn't match."))
|
raise serializers.ValidationError(
|
||||||
|
_("The two password fields didn't match."))
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def custom_signup(self, request, user):
|
def custom_signup(self, request, user):
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from django.conf.urls import url
|
from django.urls import path
|
||||||
|
|
||||||
from .views import RegisterView, VerifyEmailView
|
from .views import RegisterView, VerifyEmailView
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', RegisterView.as_view(), name='rest_register'),
|
path('', RegisterView.as_view(), name='rest_register'),
|
||||||
url(r'^verify-email/$', VerifyEmailView.as_view(), name='rest_verify_email'),
|
path('verify-email/', VerifyEmailView.as_view(), name='rest_verify_email'),
|
||||||
|
|
||||||
# This url is used by django-allauth and empty TemplateView is
|
# This url is used by django-allauth and empty TemplateView is
|
||||||
# defined just to allow reverse() call inside app, for example when email
|
# defined just to allow reverse() call inside app, for example when email
|
||||||
|
@ -18,6 +18,6 @@ urlpatterns = [
|
||||||
# If you don't want to use API on that step, then just use ConfirmEmailView
|
# If you don't want to use API on that step, then just use ConfirmEmailView
|
||||||
# view from:
|
# view from:
|
||||||
# django-allauth https://github.com/pennersr/django-allauth/blob/master/allauth/account/views.py
|
# django-allauth https://github.com/pennersr/django-allauth/blob/master/allauth/account/views.py
|
||||||
url(r'^account-confirm-email/(?P<key>[-:\w]+)/$', TemplateView.as_view(),
|
path('account-confirm-email/(?P<key>[-:\w]+)/', TemplateView.as_view(),
|
||||||
name='account_confirm_email'),
|
name='account_confirm_email'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.decorators.debug import sensitive_post_parameters
|
from django.views.decorators.debug import sensitive_post_parameters
|
||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
|
@ -3,8 +3,8 @@ from django.conf import settings
|
||||||
from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm
|
from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm
|
||||||
from django.contrib.auth.tokens import default_token_generator
|
from django.contrib.auth.tokens import default_token_generator
|
||||||
from django.utils.http import urlsafe_base64_decode as uid_decoder
|
from django.utils.http import urlsafe_base64_decode as uid_decoder
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from rest_framework import serializers, exceptions
|
from rest_framework import serializers, exceptions
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
@ -85,7 +85,8 @@ class LoginSerializer(serializers.Serializer):
|
||||||
# Authentication without using allauth
|
# Authentication without using allauth
|
||||||
if email:
|
if email:
|
||||||
try:
|
try:
|
||||||
username = UserModel.objects.get(email__iexact=email).get_username()
|
username = UserModel.objects.get(
|
||||||
|
email__iexact=email).get_username()
|
||||||
except UserModel.DoesNotExist:
|
except UserModel.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -107,7 +108,8 @@ class LoginSerializer(serializers.Serializer):
|
||||||
if app_settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY:
|
if app_settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY:
|
||||||
email_address = user.emailaddress_set.get(email=user.email)
|
email_address = user.emailaddress_set.get(email=user.email)
|
||||||
if not email_address.verified:
|
if not email_address.verified:
|
||||||
raise serializers.ValidationError(_('E-mail is not verified.'))
|
raise serializers.ValidationError(
|
||||||
|
_('E-mail is not verified.'))
|
||||||
|
|
||||||
attrs['user'] = user
|
attrs['user'] = user
|
||||||
return attrs
|
return attrs
|
||||||
|
@ -147,9 +149,11 @@ class JWTSerializer(serializers.Serializer):
|
||||||
"""
|
"""
|
||||||
rest_auth_serializers = getattr(settings, 'REST_AUTH_SERIALIZERS', {})
|
rest_auth_serializers = getattr(settings, 'REST_AUTH_SERIALIZERS', {})
|
||||||
JWTUserDetailsSerializer = import_callable(
|
JWTUserDetailsSerializer = import_callable(
|
||||||
rest_auth_serializers.get('USER_DETAILS_SERIALIZER', UserDetailsSerializer)
|
rest_auth_serializers.get(
|
||||||
|
'USER_DETAILS_SERIALIZER', UserDetailsSerializer)
|
||||||
)
|
)
|
||||||
user_data = JWTUserDetailsSerializer(obj['user'], context=self.context).data
|
user_data = JWTUserDetailsSerializer(
|
||||||
|
obj['user'], context=self.context).data
|
||||||
return user_data
|
return user_data
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,7 +171,8 @@ class PasswordResetSerializer(serializers.Serializer):
|
||||||
|
|
||||||
def validate_email(self, value):
|
def validate_email(self, value):
|
||||||
# Create PasswordResetForm with the serializer
|
# Create PasswordResetForm with the serializer
|
||||||
self.reset_form = self.password_reset_form_class(data=self.initial_data)
|
self.reset_form = self.password_reset_form_class(
|
||||||
|
data=self.initial_data)
|
||||||
if not self.reset_form.is_valid():
|
if not self.reset_form.is_valid():
|
||||||
raise serializers.ValidationError(self.reset_form.errors)
|
raise serializers.ValidationError(self.reset_form.errors)
|
||||||
|
|
||||||
|
@ -205,7 +210,7 @@ class PasswordResetConfirmSerializer(serializers.Serializer):
|
||||||
|
|
||||||
# Decode the uidb64 to uid to get User object
|
# Decode the uidb64 to uid to get User object
|
||||||
try:
|
try:
|
||||||
uid = force_text(uid_decoder(attrs['uid']))
|
force_str(uid_decoder(attrs['uid']))
|
||||||
self.user = UserModel._default_manager.get(pk=uid)
|
self.user = UserModel._default_manager.get(pk=uid)
|
||||||
except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
|
except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
|
||||||
raise ValidationError({'uid': ['Invalid value']})
|
raise ValidationError({'uid': ['Invalid value']})
|
||||||
|
@ -256,8 +261,7 @@ class PasswordChangeSerializer(serializers.Serializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
if all(invalid_password_conditions):
|
if all(invalid_password_conditions):
|
||||||
err_msg = _("Your old password was entered incorrectly. Please enter it again.")
|
raise serializers.ValidationError('Invalid password')
|
||||||
raise serializers.ValidationError(err_msg)
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls import url
|
from django.urls import path
|
||||||
|
|
||||||
from rest_auth.views import (
|
from rest_auth.views import (
|
||||||
LoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
LoginView, LogoutView, UserDetailsView, PasswordChangeView,
|
||||||
|
@ -7,14 +7,14 @@ from rest_auth.views import (
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# URLs that do not require a session or valid token
|
# URLs that do not require a session or valid token
|
||||||
url(r'^password/reset/$', PasswordResetView.as_view(),
|
path('password/reset/', PasswordResetView.as_view(),
|
||||||
name='rest_password_reset'),
|
name='rest_password_reset'),
|
||||||
url(r'^password/reset/confirm/$', PasswordResetConfirmView.as_view(),
|
path('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'),
|
path('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'),
|
path('logout/', LogoutView.as_view(), name='rest_logout'),
|
||||||
url(r'^user/$', UserDetailsView.as_view(), name='rest_user_details'),
|
path('user/', UserDetailsView.as_view(), name='rest_user_details'),
|
||||||
url(r'^password/change/$', PasswordChangeView.as_view(),
|
path('password/change/', PasswordChangeView.as_view(),
|
||||||
name='rest_password_change'),
|
name='rest_password_change'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,7 +6,7 @@ from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.decorators.debug import sensitive_post_parameters
|
from django.views.decorators.debug import sensitive_post_parameters
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
@ -89,7 +89,8 @@ class LoginView(GenericAPIView):
|
||||||
from rest_framework_jwt.settings import api_settings as jwt_settings
|
from rest_framework_jwt.settings import api_settings as jwt_settings
|
||||||
if jwt_settings.JWT_AUTH_COOKIE:
|
if jwt_settings.JWT_AUTH_COOKIE:
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
expiration = (datetime.utcnow() + jwt_settings.JWT_EXPIRATION_DELTA)
|
expiration = (datetime.utcnow() +
|
||||||
|
jwt_settings.JWT_EXPIRATION_DELTA)
|
||||||
response.set_cookie(jwt_settings.JWT_AUTH_COOKIE,
|
response.set_cookie(jwt_settings.JWT_AUTH_COOKIE,
|
||||||
self.token,
|
self.token,
|
||||||
expires=expiration,
|
expires=expiration,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user