class User(UserMixin, PkModel): """A user of the app.""" __tablename__ = "users" username = Column(db.String(80), unique=True, nullable=False) email = Column(db.String(80), unique=True, nullable=False) _password = Column("password", db.LargeBinary(128), nullable=True) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) first_name = Column(db.String(30), nullable=True) last_name = Column(db.String(30), nullable=True) active = Column(db.Boolean(), default=False) is_admin = Column(db.Boolean(), default=False) @hybrid_property def password(self): """Hashed password.""" return self._password @password.setter def password(self, value): """Set password.""" self._password = bcrypt.generate_password_hash(value) def check_password(self, value): """Check password.""" return bcrypt.check_password_hash(self._password, value) @property def full_name(self): """Full user name.""" return f"{self.first_name} {self.last_name}" def __repr__(self): """Represent instance as a unique string.""" return f"<User({self.username!r})>"
class User(Model, UserMixin): __tablename__ = 'users_user' id = db.Column( db.Integer, primary_key=True, unique=True, nullable=False) username = db.Column( db.String(50)) email = db.Column( db.String(120), unique=True) _password = db.Column( db.LargeBinary(120)) _salt = db.Column( db.String(120)) @hybrid_property def password(self): return self._password @password.setter def password(self, value): if self._salt is None: self._salt = bytes(bcrypt.gensalt()) self._password = self._hash_password(value) def is_valid_password(self, password): new_hash = self._hash_password(password) return constant_time_compare(new_hash, self._password) def _hash_password(self, password): pwd = password.encode("utf-8") salt = bytes(self._salt) hashed = bcrypt.hashpw(pwd, salt) return bytes(hashed) def __repr__(self): return "<User #{:d}>".format(self.id)
class User(UserMixin, SurrogatePK, Model): """A user of the app.""" __tablename__ = "users" username = Column(db.String(80), unique=True, nullable=False) email = Column(db.String(80), unique=True, nullable=False) #: The hashed password password = Column(db.LargeBinary(128), nullable=True) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) first_name = Column(db.String(30), nullable=True) last_name = Column(db.String(30), nullable=True) active = Column(db.Boolean(), default=False) is_admin = Column(db.Boolean(), default=False) def __init__(self, username, email, password=None, **kwargs): """Create instance.""" db.Model.__init__(self, username=username, email=email, **kwargs) if password: self.set_password(password) else: self.password = None def set_password(self, password): """Set password.""" self.password = bcrypt.generate_password_hash(password) def check_password(self, value): """Check password.""" return bcrypt.check_password_hash(self.password, value) @property def full_name(self): """Full user name.""" return "{0} {1}".format(self.first_name, self.last_name) def __repr__(self): """Represent instance as a unique string.""" return "<User({username!r})>".format(username=self.username)