栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask密码加密入库&校验

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask密码加密入库&校验

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同等加密后对比,即可返回布尔值,完成校验。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号