I've enabled user names in auth by doing:

auth.define_tables(username=True)

How can I prevent users from registering with names in a blacklist, such as:

admin
administrator
moderator
sysadmin

and possibly offensive words

Update

Here's the username validator that I made:

class UsernameValidator(object):
    def __init__(self, error_message='Invalid username'):
        self.error_message = error_message
    def __call__(self, value):
        if self.validate(value):
            return (value, None)
        else:
            return (value, self.error_message)

    def validate(self, value):
        blacklist = ['administrator', 'moderator', 'admin', '<swear word>']
        if any(word in value for word in blacklist):
            return False
        else:
            return True

I put this in a model file with a filename starting with "0" so it would be loaded before db.py

有帮助吗?

解决方案

def validate_username(form):
    if form.vars.username in ['admin', 'administrator', 'moderator']:
        form.errors.username = '%s is not a valid username.' % \
                               form.vars.username

auth.settings.register_onvalidation.append(validate_username)

You can also create a custom validator and do:

db.auth_user.username.requires.append(MyCustomValidator())
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top