def clean_username(self, username, shallow=False): """ Validates the username. You can hook into this if you want to (dynamically) restrict what usernames can be chosen. """ for validator in app_settings.USERNAME_VALIDATORS: validator(username) # TODO: Add regexp support to USERNAME_BLACKLIST username_blacklist_lower = [ ub.lower() for ub in app_settings.USERNAME_BLACKLIST ] if username.lower() in username_blacklist_lower: raise forms.ValidationError( self.error_messages['username_blacklisted']) # Skipping database lookups when shallow is True, needed for unique # username generation. if not shallow: from allauth.account.utils import filter_users_by_username if filter_users_by_username(username).exists(): user_model = get_user_model() username_field = app_settings.USER_MODEL_USERNAME_FIELD error_message = user_model._meta.get_field( username_field).error_messages.get('unique') if not error_message: error_message = self.error_messages['username_taken'] raise forms.ValidationError(error_message) return username
def _authenticate_by_username(self, **credentials): username_field = app_settings.USER_MODEL_USERNAME_FIELD username = credentials.get('username') password = credentials.get('password') User = get_user_model() if not username_field or username is None or password is None: return None try: # Username query is case insensitive user = filter_users_by_username(username).get() if self._check_password(user, password): return user except User.DoesNotExist: return None
def generate_unique_username(txts, regex=None): from .account.app_settings import USER_MODEL_USERNAME_FIELD from .account.adapter import get_adapter from allauth.account.utils import filter_users_by_username adapter = get_adapter() basename = _generate_unique_username_base(txts, regex) candidates = generate_username_candidates(basename) existing_users = filter_users_by_username(*candidates).values_list( USER_MODEL_USERNAME_FIELD, flat=True) for candidate in candidates: if candidate not in existing_users: try: return adapter.clean_username(candidate, shallow=True) except ValidationError: pass # This really should not happen raise NotImplementedError('Unable to find a unique username')
def generate_unique_username(txts, regex=None): from .account.app_settings import USER_MODEL_USERNAME_FIELD from .account.adapter import get_adapter from allauth.account.utils import filter_users_by_username adapter = get_adapter() basename = _generate_unique_username_base(txts, regex) candidates = generate_username_candidates(basename) existing_users = filter_users_by_username(*candidates).values_list( USER_MODEL_USERNAME_FIELD, flat=True) for candidate in candidates: if candidate not in existing_users: try: return adapter.clean_username(candidate, shallow=True) except ValidationError: pass # This really should not happen raise NotImplementedError('Unable to find a unique username')
def test_username_case_preserved(self): user = get_user_model()() user_username(user, 'CamelCase') self.assertEqual(user_username(user), 'CamelCase') # TODO: Actually test something filter_users_by_username('camelcase', 'foobar')
def test_username_lower_cased(self): user = get_user_model()() user_username(user, 'CamelCase') self.assertEqual(user_username(user), 'camelcase') # TODO: Actually test something filter_users_by_username('CamelCase', 'FooBar')