From d1838adb140e8e3a952c9ff7f7f1ea0fee7474e7 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Wed, 15 Aug 2012 17:30:43 -0500 Subject: [PATCH] IS_IN_DB validator for auth_user username/email, thanks Anthony, fixed issue 934 --- VERSION | 2 +- gluon/tools.py | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/VERSION b/VERSION index bf7d2152..022297e6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.00.0 (2012-08-15 17:24:22) dev +Version 2.00.0 (2012-08-15 17:30:38) dev diff --git a/gluon/tools.py b/gluon/tools.py index 3ab1d012..161447d8 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -2056,6 +2056,27 @@ class Auth(object): if log is DEFAULT: log = self.messages.register_log + table_user = self.settings.table_user + if 'username' in table_user.fields: + username = 'username' + else: + username = 'email' + + # Ensure the username field is unique. + unique_validator = IS_NOT_IN_DB(self.db, table_user[username]) + if not table_user[username].requires: + table_user[username].requires = unique_validator + elif isinstance(table_user[username].requires, (list, tuple)): + if not any([isinstance(validator, IS_NOT_IN_DB) for validator in + table_user[username].requires]): + if isinstance(table_user[username].requires, list): + table_user[username].requires.append(unique_validator) + else: + table_user[username].requires += (unique_validator, ) + elif not isinstance(table_user[username].requires, IS_NOT_IN_DB): + table_user[username].requires = [table_user[username].requires, + unique_validator] + passfield = self.settings.password_field formstyle = self.settings.formstyle form = SQLFORM(table_user, @@ -2117,11 +2138,6 @@ class Auth(object): if not self.settings.registration_requires_verification: table_user[form.vars.id] = dict(registration_key='') session.flash = self.messages.registration_successful - table_user = self.settings.table_user - if 'username' in table_user.fields: - username = 'username' - else: - username = 'email' user = self.db(table_user[username] == form.vars[username]).select().first() user = Storage(table_user._filter_fields(user, id=True)) session.auth = Storage(user=user, last_visit=request.now,