Flask密码加密入库&校验

  • 用户模型类示例:

    class User(db.Model):
        """ 用户模型 """
        __tablename__ = 'user'
    
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        username = db.Column(db.String(150), nullable=False)
        email = db.Column(db.String(50), nullable=False, unique=True)
        join_time = db.Column(db.DateTime, default=datetime.now)
        _password = db.Column(db.String(150), nullable=False)
    	
        # 实现密码加密入库,需要重写模型类初始化方法:
        def __init__(self, username, password, email):
            self.username = username
            self.email = email
            self.password = password  
            # 调用该属性方法,返回加密后的密码值
    
        @property
        def password(self):
            # raise Exception('No access')  # 禁止访问
            return self._password
    
        @password.setter
        def password(self, raw_password):
            """ 密码加密  xxx.setter需要和上面的方法名称相同 """
            self._password = generate_password_hash(raw_password)
    
        def check_password(self, raw_password):
            """ 用于验证后台登录密码是否和数据库一致,raw_password 是后台登录输入的密码 """
            result = check_password_hash(self.password, raw_password)  
            # 使用相同的hash加密算法加密raw_password,检测与数据库中是否一致
            return result
    
  • 解析:

    数据库中存入的加密密码字段为 _password, 需重写模型类的初始化方法。

    1. 前台密码入库时:

      前台传入User类中的密码参数是未加密的 password,此时初始方法(self.password = password)默认调用@password.setter,进行加密后赋值给 _password 属性,最后保存至数据库。

    2. 前台密码校验时:

      前台传参至校验方法:check_password_hash(self.password, raw_password),参数self.password 为属性方法的返回值_password,也就是库中加密后的密码,与前台传入的原始密码raw_password同等加密后对比,即可返回布尔值,完成校验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值