簡體   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