Skip to content

Commit b0f82eb

Browse files
authored
BLUEBUTTON-666 Add login using email address in addition to username (#684)
* Add login using email address in addition to username * Add test for login using email address
1 parent 5451608 commit b0f82eb

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

apps/accounts/tests/test_login.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,12 @@ def test_logout(self):
6464
response = self.client.get(reverse('mylogout'), follow=True)
6565
self.assertEqual(response.status_code, 200)
6666
self.assertContains(response, 'Login')
67+
68+
def test_valid_login_email(self):
69+
"""
70+
Valid User can login using their email address
71+
"""
72+
form_data = {'username': 'fred@example.com', 'password': 'bedrocks'}
73+
response = self.client.post(self.url, form_data, follow=True)
74+
self.assertEqual(response.status_code, 200)
75+
self.assertContains(response, 'Logout')

apps/accounts/views/mfa.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from django.http import HttpResponseRedirect
44
from django.urls import reverse
55
from django.contrib.auth import authenticate, login
6+
from django.contrib.auth.models import User
67
from django.contrib import messages
78
from django.utils.translation import ugettext_lazy as _
89
from ..models import UserProfile, MFACode
@@ -15,6 +16,7 @@
1516
from django.views.decorators.cache import never_cache
1617
from axes.decorators import axes_dispatch
1718

19+
1820
logger = logging.getLogger('hhs_oauth_server.accounts')
1921
failed_login_log = logging.getLogger('unsuccessful_logins')
2022

@@ -88,6 +90,17 @@ def mfa_login(request):
8890
if form.is_valid():
8991
username = form.cleaned_data['username']
9092
password = form.cleaned_data['password']
93+
94+
# If username doesn't exist, try username matching email address.
95+
try:
96+
User.objects.get(username__iexact=username)
97+
except User.DoesNotExist:
98+
try:
99+
check_user = User.objects.get(email__iexact=username)
100+
username = check_user.username
101+
except User.DoesNotExist:
102+
pass
103+
91104
user = authenticate(request=request, username=username.lower(), password=password)
92105

93106
if user is not None:

0 commit comments

Comments
 (0)