allow for a multi_login option that accepts both emails and usernames
This commit is contained in:
+28
-9
@@ -913,6 +913,7 @@ class Auth(object):
|
|||||||
use_username=False,
|
use_username=False,
|
||||||
login_email_validate=True,
|
login_email_validate=True,
|
||||||
login_userfield=None,
|
login_userfield=None,
|
||||||
|
multi_login=False,
|
||||||
logout_onlogout=None,
|
logout_onlogout=None,
|
||||||
register_fields=None,
|
register_fields=None,
|
||||||
register_verify_password=True,
|
register_verify_password=True,
|
||||||
@@ -2168,12 +2169,6 @@ class Auth(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
table_user = self.table_user()
|
table_user = self.table_user()
|
||||||
if self.settings.login_userfield:
|
|
||||||
username = self.settings.login_userfield
|
|
||||||
elif 'username' in table_user.fields:
|
|
||||||
username = 'username'
|
|
||||||
else:
|
|
||||||
username = 'email'
|
|
||||||
settings = self.settings
|
settings = self.settings
|
||||||
if 'username' in table_user.fields or \
|
if 'username' in table_user.fields or \
|
||||||
not settings.login_email_validate:
|
not settings.login_email_validate:
|
||||||
@@ -2184,8 +2179,6 @@ class Auth(object):
|
|||||||
tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
|
tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
|
||||||
if not settings.email_case_sensitive:
|
if not settings.email_case_sensitive:
|
||||||
tmpvalidator = [IS_LOWER(), tmpvalidator]
|
tmpvalidator = [IS_LOWER(), tmpvalidator]
|
||||||
old_requires = table_user[username].requires
|
|
||||||
table_user[username].requires = tmpvalidator
|
|
||||||
|
|
||||||
request = current.request
|
request = current.request
|
||||||
response = current.response
|
response = current.response
|
||||||
@@ -2228,6 +2221,21 @@ class Auth(object):
|
|||||||
|
|
||||||
user = None # default
|
user = None # default
|
||||||
|
|
||||||
|
|
||||||
|
#Setup the default field used for the form
|
||||||
|
multi_login = False
|
||||||
|
if self.settings.login_userfield:
|
||||||
|
username = self.settings.login_userfield
|
||||||
|
else:
|
||||||
|
if 'username' in table_user.fields:
|
||||||
|
username = 'username'
|
||||||
|
else:
|
||||||
|
username = 'email'
|
||||||
|
if self.settings.multi_login:
|
||||||
|
multi_login = True
|
||||||
|
old_requires = table_user[username].requires
|
||||||
|
table_user[username].requires = tmpvalidator
|
||||||
|
|
||||||
# do we use our own login form, or from a central source?
|
# do we use our own login form, or from a central source?
|
||||||
if settings.login_form == self:
|
if settings.login_form == self:
|
||||||
form = SQLFORM(
|
form = SQLFORM(
|
||||||
@@ -2285,7 +2293,18 @@ class Auth(object):
|
|||||||
|
|
||||||
accepted_form = True
|
accepted_form = True
|
||||||
# check for username in db
|
# check for username in db
|
||||||
user = table_user(**{username: form.vars[username]})
|
if multi_login:
|
||||||
|
entered_username = form.vars[username]
|
||||||
|
if entered_username.find('@') < 0:
|
||||||
|
#no @, look for a username
|
||||||
|
#TODO: Is this still true?
|
||||||
|
#NOTE: @ is no allowed for usernames, so a username will
|
||||||
|
# never have an @ symbol unless an admin made it
|
||||||
|
user = table_user(**{'username': entered_username})
|
||||||
|
else:
|
||||||
|
user = table_user(**{'email': entered_username})
|
||||||
|
else:
|
||||||
|
user = table_user(**{username: form.vars[username]})
|
||||||
if user:
|
if user:
|
||||||
# user in db, check if registration pending or disabled
|
# user in db, check if registration pending or disabled
|
||||||
temp_user = user
|
temp_user = user
|
||||||
|
|||||||
Reference in New Issue
Block a user