Regex для пароля (flask) - PullRequest
       3

Regex для пароля (flask)

0 голосов
/ 24 апреля 2020

Я пытаюсь реализовать некоторые базовые c требования к паролю для моего Flask веб-приложения, но я заметил, что моя веб-страница не выдает ошибку, когда я пытаюсь создать учетную запись, даже если она должна работать.

Для пользователя мне нужно, чтобы оно было минимум 8 символов, alphanumeri c и имело как минимум 1 специальный символ. У меня есть этот код в моем forms.py

class customer_registration(FlaskForm):
    username = StringField("Username:", validators=[validators.Length(min=3, max=20), DataRequired()])
    email = StringField("Email:", validators=[validators.Length(min=6, max=60), DataRequired()])
    password = PasswordField("Password:", validators=[validators.Regexp(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$', message='Password must contain 1 letter, 1 number and 1 special character.'), validators.Length(min=8, max=20), DataRequired(), validators.EqualTo('cfm_password', message='Password must match')])
    cfm_password = PasswordField("Confirm Password:", validators=[validators.Length(min=8, max=20), DataRequired()])
    submit = SubmitField()

Для администратора мне нужно, чтобы он был минимум 8 символов, иметь 1 верхний регистр, 1 нижний регистр, 1 цифру и иметь 1 специальный символ. У меня есть этот код в моем forms.py.

class create_admin_account(FlaskForm):
    username = StringField("Username:", validators=[validators.Length(min=3, max=12), DataRequired()])
    password = PasswordField("Password:", validators=[validators.Regexp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$', message='Password must contain 1 upper case, 1 lower case, 1 number and 1 special character.'), validators.Length(min=8, max=16),DataRequired(), validators.EqualTo('cfm_password', message='Passwords must match')])
    cfm_password = PasswordField("Confirm Password:", validators=[validators.Length(min=8, max=16),DataRequired()])
    submit = SubmitField()

В моих init .py (пользователь) и admin_url.py (администратор), вот что у меня есть для пользователя и администратора создание.

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = customer_registration()
    if(logincontroller.find_user_username(form.username.data)):
        flash("Username exists, please  choose another.", "error")
    if request.method == 'POST' and form.validate():

        flag = logincontroller.create_user_account(form.username.data, form.password.data, form.email.data)
        if(flag):
            flash("You have registered, please login", "success")
            return redirect(url_for('login'))
        else:
            flash("you have failed to register, something went wrong, try again", "error")

    return render_template('register.html', form=form)

и

@admin_pages.route('/admin/accounts/admin/create', methods=['GET', 'POST'])
@authorize
def create_admin_accounts():
    context = {}
    form = create_admin_account()
    if request.method == 'POST' and form.validate():
        success_flag = logincontroller.create_admin_account(form.username.data, form.password.data)
        if (not success_flag):
            flash("Error, you cannot create an account", "error")
        else:
            flash("Admin account created.", "success")
        form = create_admin_account()
    return render_template('admin/accounts/create_admin_accounts.html', form=form, message=context)

Исходя из моего понимания, я правильно выполнил выражение регулярного выражения, поскольку оно должно быть

r '^ ( ? =. [A-Za-Z]) (? =. \ d) (? =. [@ $!% #? &]) [A-Za-г \ d @ $!% * #? &] {8,} $ '

для пользователя и

r' ^ (? =. [ аз]) (? =. [AZ]) (? =. \ d) (? =. [@ $!% ? &]) [A-Za-г \ d @ $!% ? &] {8,} $ '

для администратора.

Не могу понять, что пошло не так в пути , До того, как я добавил валидаторы регулярных выражений, все работало гладко. Заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...