diff --git a/rest_auth/registration/urls.py b/rest_auth/registration/urls.py index ad401ef..aead53c 100644 --- a/rest_auth/registration/urls.py +++ b/rest_auth/registration/urls.py @@ -5,8 +5,7 @@ from .views import Register, VerifyEmail urlpatterns = patterns('', url(r'^$', Register.as_view(), name='rest_register'), - url(r'^verify-email/(?P\w+)/$', VerifyEmail.as_view(), - name='verify_email'), + url(r'^verify-email/$', VerifyEmail.as_view(), name='verify_email'), url(r'^account-email-verification-sent/$', TemplateView.as_view(), name='account_email_verification_sent'), diff --git a/rest_auth/registration/views.py b/rest_auth/registration/views.py index f812e1d..8225bcb 100644 --- a/rest_auth/registration/views.py +++ b/rest_auth/registration/views.py @@ -3,7 +3,7 @@ from rest_framework.response import Response from rest_framework.permissions import AllowAny from rest_framework import status -from allauth.account.views import SignupView +from allauth.account.views import SignupView, ConfirmEmailView from allauth.account.utils import complete_signup from allauth.account import app_settings @@ -40,5 +40,12 @@ class Register(APIView, SignupView): return Response(self.form.errors, status=status.HTTP_400_BAD_REQUEST) -class VerifyEmail(APIView): - pass +class VerifyEmail(APIView, ConfirmEmailView): + + permission_classes = (AllowAny,) + + def post(self, request, *args, **kwargs): + self.kwargs['key'] = self.request.DATA.get('key', '') + confirmation = self.get_object() + confirmation.confirm(self.request) + return Response({'message': 'ok'}, status=status.HTTP_200_OK) diff --git a/rest_auth/tests.py b/rest_auth/tests.py index 1c4d59e..0ce2ecb 100644 --- a/rest_auth/tests.py +++ b/rest_auth/tests.py @@ -153,6 +153,7 @@ class APITestCase1(TestCase, BaseAPITestCase): self.register_url = reverse('rest_register') self.password_reset_url = reverse('rest_password_reset') self.user_url = reverse('rest_user_details') + self.veirfy_email_url = reverse('verify_email') setattr(settings, 'REST_PROFILE_MODULE', self.PROFILE_MODEL) self.user_profile_model = None @@ -323,9 +324,11 @@ class APITestCase1(TestCase, BaseAPITestCase): mail_count = len(mail.outbox) # test empty payload - self.post(self.register_url, data={}, status_code=400) + self.post(self.register_url, data={}, + status_code=status.HTTP_400_BAD_REQUEST) - self.post(self.register_url, data=self.REGISTRATION_DATA_WITH_EMAIL, status_code=201) + self.post(self.register_url, data=self.REGISTRATION_DATA_WITH_EMAIL, + status_code=status.HTTP_201_BAD_REQUEST) self.assertEqual(User.objects.all().count(), user_count + 1) self.assertEqual(len(mail.outbox), mail_count + 1) new_user = get_user_model().objects.latest('id') @@ -336,4 +339,14 @@ class APITestCase1(TestCase, BaseAPITestCase): "username": self.USERNAME, "password": self.PASS } - self.post(self.login_url, data=payload, status=status.HTTP_400_BAD_REQUEST) + self.post(self.login_url, data=payload, + status=status.HTTP_400_BAD_REQUEST) + + # veirfy email + email_confirmation = new_user.emailaddress_set.get(email=self.EMAIL)\ + .emailconfirmation_set.last() + self.post(self.veirfy_email_url, data={"key": email_confirmation.key}, + status_code=status.HTTP_200_OK) + + # try to login again + self.post(self.login_url, data=payload, status_code=status.HTTP_200_OK)