Skip to content

Commit

Permalink
Added auto login to VerifyUserEmailView & tests.
Browse files Browse the repository at this point in the history
Still needs work, do not merge.
  • Loading branch information
SemVerTsar committed Jul 29, 2016
1 parent 7a7b57c commit eca0776
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
23 changes: 20 additions & 3 deletions user_management/ui/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@
class TestVerifyUserEmailView(RequestTestCase):
view_class = views.VerifyUserEmailView

def setUp(self):
self.user = VerifyEmailUserFactory.create(email_verified=False)

def test_get(self):
"""A user clicks the link in their email and activates their account."""
user = VerifyEmailUserFactory.create(email_verified=False)
token = user.generate_validation_token()
token = self.user.generate_validation_token()

request = self.create_request('get', auth=False)
view = self.view_class.as_view()
response = view(request, token=token)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, '/accounts/login/?next=/')

user = VerifyEmailUser.objects.get(pk=user.pk)
user = VerifyEmailUser.objects.get(pk=self.user.pk)

self.assertTrue(user.email_verified)
self.assertTrue(user.is_active)
Expand All @@ -31,6 +33,21 @@ def test_get(self):
str(request._messages.store[0]),
)

def test_auto_login_get(self):
"""Test the user is automatically logged in after email verification."""
token = self.user.generate_validation_token()

request = self.create_request('get', auth=False)
self.add_session_to_request(request)

with override_settings(USER_MANAGEMENT_AUTO_LOGIN=True):
view = self.view_class.as_view()
response = view(request, token=token)

self.assertEqual(response.url, '/')

self.assertEqual(int(request.session['_auth_user_id']), self.user.pk)

def test_get_nonsense_token(self):
"""The view is accessed with a broken token and 404s."""
token = 'I_am_a_token'
Expand Down
14 changes: 14 additions & 0 deletions user_management/ui/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import login # authenticate, login
from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from django.views import generic

Expand All @@ -21,9 +23,13 @@ class VerifyUserEmailView(VerifyAccountViewMixin, generic.RedirectView):
As a RedirectView, this will return a HTTP 302 on success. This defaults to
`/` but can be overridden by changing the `url` attribute in a subclass or setting
LOGIN_URL in your settings.
Write some stuff
"""
permanent = False
url = getattr(settings, 'LOGIN_URL', '/')
auto_login_url = getattr(settings, 'USER_MANAGEMENT_AUTO_LOGIN_URL', '/')
success_message = _('Your email address was confirmed.')
invalid_exception_class = InvalidExpiredToken
permission_denied_class = PermissionDenied
Expand All @@ -35,4 +41,12 @@ def dispatch(self, request, *args, **kwargs):
def get(self, request, *args, **kwargs):
self.activate_user()
messages.success(request, self.success_message)

if getattr(settings, 'USER_MANAGEMENT_AUTO_LOGIN', False):
self.user.backend = settings.AUTHENTICATION_BACKENDS
# authenticate(username=, password=)
login(request, self.user)

return redirect(self.auto_login_url)

return redirect_to_login('/', login_url=self.url)

0 comments on commit eca0776

Please sign in to comment.