Skip to content

Commit

Permalink
Use LOGIN_REDIRECT_URL after VerifyUserEmailView.
Browse files Browse the repository at this point in the history
  • Loading branch information
maxpeterson committed Nov 30, 2016
1 parent 4f4dd81 commit d9365d3
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## UPCOMING

* Update `VerifyUserEmailView` to use LOGIN_REDIRECT_URL rather than `/` as the next url after the login redirect.

## 15.0.0

* Updated for compatibility with Python 3.5 and Django 1.10
Expand Down
25 changes: 24 additions & 1 deletion user_management/ui/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from django.conf import settings
from django.core.urlresolvers import reverse
from django.test import override_settings
from django.test.utils import override_script_prefix

from user_management.models.tests.factories import VerifyEmailUserFactory
from user_management.models.tests.models import VerifyEmailUser
Expand All @@ -19,7 +22,9 @@ def test_get(self):
view = self.view_class.as_view()
response = view(request, token=token)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, '/accounts/login/?next=/')

expected_url = '{}?next={}'.format(settings.LOGIN_URL, settings.LOGIN_REDIRECT_URL)
self.assertEqual(response.url, expected_url)

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

Expand All @@ -31,6 +36,24 @@ def test_get(self):
str(request._messages.store[0]),
)

@override_settings(LOGIN_REDIRECT_URL='user_management_api:profile_detail')
@override_script_prefix('/blah/')
def test_get_prefix(self):
"""Regression test to ensure that the login redirect uses SCRIPT_NAME prefix."""
user = VerifyEmailUserFactory.create(email_verified=False)
token = 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)

login_redirect_url = reverse(settings.LOGIN_REDIRECT_URL)
self.assertIn('/blah/', login_redirect_url)
expected_url = '{}?next={}'.format(settings.LOGIN_URL, login_redirect_url)
self.assertEqual(response.url, expected_url)

def test_get_nonsense_token(self):
"""The view is accessed with a broken token and 404s."""
token = 'I_am_a_token'
Expand Down
4 changes: 3 additions & 1 deletion user_management/ui/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from django.contrib import messages
from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import PermissionDenied
from django.shortcuts import resolve_url
from django.utils.translation import ugettext_lazy as _
from django.views import generic

Expand Down Expand Up @@ -33,6 +34,7 @@ def dispatch(self, request, *args, **kwargs):
return super(VerifyUserEmailView, self).dispatch(request, *args, **kwargs)

def get(self, request, *args, **kwargs):
next = resolve_url(settings.LOGIN_REDIRECT_URL)
self.activate_user()
messages.success(request, self.success_message)
return redirect_to_login('/', login_url=self.url)
return redirect_to_login(next, login_url=self.url)

0 comments on commit d9365d3

Please sign in to comment.