1. 程式人生 > 其它 >flask(三)使用者登入密碼加密

flask(三)使用者登入密碼加密

修改專案檔案中apps/admin/models.py檔案

from werkzeug.security import generate_password_hash,check_password_hash
from exts import db

class Users(db.Model):
    __tablename__='fm_user'
    uid = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)  # 使用者名稱不能為空
    email = db.Column(db.String(50),nullable=False,unique=True)  # 郵箱不能為空,而且必須唯一
    _password = db.Column(db.String(100),nullable=False)  # 密碼不能為空

    def __init__(self,username,password,email):
        self.username=username
        self.password=password
        self.email=email
    ## 獲取密碼
    @property
    def password(self):
        return self._password
    ## 設定密碼
    @password.setter
    def password(self,raw_password):
        self._password=generate_password_hash(raw_password)  # 密碼加密
    ## 檢查密碼
    def chek_password(self,raw_password):
        result = check_password_hash(self.password,raw_password)
        return result

(需要重新執行遷移資料庫命令)

資料庫中存入的加密密碼欄位為 _password, 需重寫模型類的初始化方法。

前臺密碼入庫時:
前臺傳入User類中的密碼引數是未加密的 password,此時初始方法(self.password = password)預設呼叫@password.setter,進行加密後賦值給 _password 屬性,最後儲存至資料庫。

前臺密碼校驗時:
前臺傳參至校驗方法:check_password_hash(self.password, raw_password),引數self.password 為屬性方法的返回值_password,也就是庫中加密後的密碼,與前臺傳入的原始密碼raw_password同等加密後對比,即可返回布林值,完成校驗。