File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -84,6 +84,18 @@ def test_login_and_logout(self):
8484 self .assertEqual (r .status_code , 302 )
8585 self .assertEqual (urlsplit (r ["Location" ])[2 ], "/foobar" )
8686
87+ def test_login_with_different_email (self ):
88+ person = PersonFactory (user__username = 'plain' )
89+ email = EmailFactory (person = person )
90+
91+ # try logging in without a next
92+ r = self .client .get (urlreverse (ietf .ietfauth .views .login ))
93+ self .assertEqual (r .status_code , 200 )
94+
95+ r = self .client .post (urlreverse (ietf .ietfauth .views .login ), {"username" :email , "password" :"plain+password" })
96+ self .assertEqual (r .status_code , 302 )
97+ self .assertEqual (urlsplit (r ["Location" ])[2 ], urlreverse (ietf .ietfauth .views .profile ))
98+
8799 def extract_confirm_url (self , confirm_email ):
88100 # dig out confirm_email link
89101 msg = confirm_email .get_payload (decode = True )
Original file line number Diff line number Diff line change 4141from django import forms
4242from django .contrib import messages
4343from django .conf import settings
44- from django .contrib .auth import update_session_auth_hash , logout
44+ from django .contrib .auth import update_session_auth_hash , logout , authenticate
4545from django .contrib .auth .decorators import login_required
4646from django .contrib .auth .forms import AuthenticationForm
4747from django .contrib .auth .hashers import identify_hasher
@@ -586,6 +586,21 @@ def login(request, extra_context=None):
586586 form = AuthenticationForm (request , data = request .POST )
587587 username = form .data .get ('username' )
588588 user = User .objects .filter (username = username ).first ()
589+ if not user :
590+ # try to find user ID from the email address
591+ email = Email .objects .filter (address = username ).first ()
592+ if email and email .person and email .person .user :
593+ u2 = email .person .user
594+ # be conservative, only accept this if login is valid
595+ if u2 :
596+ pw = form .data .get ('password' )
597+ au = authenticate (request , username = u2 .username , password = pw )
598+ if au :
599+ # kludge to change the querydict
600+ q2 = request .POST .copy ()
601+ q2 ['username' ] = u2 .username
602+ request .POST = q2
603+ user = u2
589604 #
590605 if user :
591606 try :
You can’t perform that action at this time.
0 commit comments