Я могу изменить букву в «имя пользователя» на заглавную букву и зарегистрироваться с тем же именем пользователя.Как это исправить? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть учетные записи, состоящие из [display_name, username, email, password]. При регистрации человеку необходимо будет ввести эти учетные данные. Проблема в том, что если у пользователя уже есть имя пользователя «Сок», другой пользователь может зарегистрироваться под именем пользователя «сок». Как я могу предотвратить это?

Например, твиттер не разрешит пользователям регистрироваться с тем же дескриптором, даже если они поменяют букву на заглавную.

У меня есть это, где определенные вещи установлены в базе данных уникальными, но это не помогает этой проблеме. Я буду честен, я потерян! Это мой первый проект, несмотря на то, что он проходит (чтобы увидеть, как все идет вместе), я делаю свой собственный ход вещей.

    # models.py for user

    class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    display_name = db.Column(db.String(20), nullable=False)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, 
                           default='default.jpg')
    password = db.Column(db.String(30), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    # what a user looks like
    def __repr__(self):
        return f"User('{self.display_name}', '{self.username}', 
                      '{self.email}', '{self.image_file}')"



    # forms.py for RegistrationForm

    class RegistrationForm(FlaskForm):
        display_name = StringField('Display Name', validators= 
                                   [DataRequired(),          
                                   Length(min=2, max=20)])
        username = StringField('Username', validators=[DataRequired(), 
                                Length(min=4, max=20)])
        email = StringField('Email', validators=[DataRequired(), 
                             Email()])
        password = PasswordField('Password', validators=[DataRequired(), 
                                  Length(min=6, max=30)])
        confirm_password = PasswordField('Confirm Password', validators= 
                           [DataRequired(), EqualTo('password')])
        submit = SubmitField('Sign Up')

        # stops same user credentials from signing up
        def validate_username(self, username):
            user = User.query.filter_by(username=username.data).first()
        if user:
            raise ValidationError('That username is taken. Please choose 
                                  another one')

        def validate_email(self, email):
            user = User.query.filter_by(email=email.data).first()
        if user:
            raise ValidationError('That email address is taken. Please 
                                   choose another one')

Я хочу, чтобы мое приложение не позволяло человеку регистрироваться под именем пользователя, подобным другому. Например зарегистрированное имя пользователя "сок" пользователь по-прежнему может зарегистрироваться под тем же именем пользователя, если они пишут с заглавной буквы, например, «Сок»

1 Ответ

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

Свинья отступает от того, что сказал @Shiot. При проверке сделайте имя пользователя строчным и обновите функцию сохранения, которой нет в предоставленном фрагменте кода.

def validate_username(self, username):
            user = User.query.filter_by(username=username.data.lower()).first()

Если бы я был вами, если вы находитесь в производственной среде, создайте новое поле с именем display_name, сделайте его чувствительным к регистру, скопируйте все старые имена пользователей в это поле, а затем сделайте все имена пользователей строчными.

Хорошее имя, кстати:)

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