繁体   English   中英

我可以将“用户名”中的字母更改为大写字母,并使用相同的用户名进行注册。 我该如何解决?

[英]I'm able to change a letter in “username” to a capital letter and register still with the same username. How do I fix this?

我的用户帐户包含[display_name,username,email,password]。 注册人员时必须输入这些凭据。 问题是如果用户已经拥有'Juice'的用户名,则另一个用户可以使用用户名'juice'注册。 我怎么能阻止这个?

例如,即使用户将字母更改为大写,Twitter也不会让用户注册相同的句柄。

我知道在数据库中将某些事物设置为唯一但这对这个问题没有帮助。 我会说实话,我迷路了! 这是我的第一个项目,即使它是通过(看看一切如何在一起)我一直在自己的东西旋转。

    # 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')

我希望我的应用程序不要让一个人注册用户名。 对于前者 注册用户名'juice'如果用户仍然可以使用相同的用户名注册,例如'Juice'

小猪退出@Shiot所说的话。 在验证时将用户名设置为小写, 同时更新保存功能,该保存功能不在提供的代码段中。

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

如果您是在生产环境中,则创建一个名为display_name的新字段,使该区分大小写,将所有旧用户名复制到此字段,然后将所有用户名设置为小写。

好名字顺便说一句:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM