>在本文中,我們將查看Blask-Login提供的各種功能以及如何使用它們為您的Web應用程序創建安全的用戶登錄功能。到本文結尾,您將對如何在燒瓶應用程序中實現安全用戶身份驗證有很好的了解。
>
鑰匙要點 要遵循本文的長期,您需要以下內容: 顯然,您還需要訪問Web瀏覽器。
用燒瓶 - 燃料蛋白:燒瓶 - 燃料蛋白簡化身份驗證,簡化了在燒瓶應用程序中的用戶身份驗證的實現。它提供了必不可少的功能,例如用戶會話管理,輕鬆登錄/註銷功能以及與數據庫無縫集成的用戶加載程序回調。這有助於有效地管理用戶會話並處理身份驗證過程。
>
安全密碼處理和用戶會話管理:我們將使用燒瓶-bcrypt詳細介紹密碼安全性在哈希密碼中,以及Blask-Login如何通過會話cookie管理用戶會話。這樣可以確保用戶憑據被安全存儲並準確跟踪用戶會話,從而增強了應用程序的整體安全性。
>先決條件
入門
為了充分利用燒瓶登錄模塊,我們需要安裝燒瓶login和其他必要的依賴項。這些庫提供了改善應用程序功能所需的必要功能和工具。要安裝它們,請打開命令提示符或終端並執行以下pip命令:pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
在上面的代碼段中,我們還初始化了應用程序中的LoginManager對象。 LoginManager是燒瓶 - login的擴展,用於設置用於處理用戶會話的必要配置。
創建用戶模型 模型是您要在應用程序中使用的數據結構的表示。它定義瞭如何在系統中組織,存儲和操縱數據。通常,模型與事先遵循定義結構的數據庫一起使用。對於我們的應用程序,我們有以下數據:
>pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
>您還可以根據您的項目範圍添加其他屬性,例如電子郵件地址或個人資料圖片。
>定義用戶模型後,您需要創建一個數據庫,該數據庫將存儲我們在上一個模型中創建的數據結構。 在本文中,我們將使用SQLite數據庫。這是因為SQLITE是輕巧且無服務器的數據庫引擎。這使設置和使用易於使用,因為它不需要單獨的安裝。對於中小型應用程序,這也是一個不錯的選擇。
>這是我們應用程序中使用SQLITE數據庫的步驟的細分:
>使用SQLite數據庫,您必須在燒瓶應用程序配置中設置URI。這通常是在頂部和其他配置一起完成的。這是您可以使用的片段:
在此片段中,/// ...指示文件的相對路徑 - site.db-這是我們用於SQLITE數據庫文件的名稱。此名稱可以更改為您喜歡的任何東西。<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>接下來,您必須使用此片段初始化燒瓶-Sqlalchemy Orm:
> sqlalchemy是一種對象凝聚的映射器,提供了一組使用Python使用數據庫的工具。行DB = SQLALCHEMY(APP)創建了SQLalchemy類的實例,並將其綁定到您的燒瓶應用程序(App)。
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>此代碼通常放置在Python腳本的末尾或用於初始化數據庫的單獨腳本中。運行腳本後,將根據我們先前定義的模型創建數據庫文件。
在這種情況下,如果尚不存在,則代碼將使用用戶表創建一個site.db文件。 site.db文件通常包含在一個名為 /instance /。
的文件夾中app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
接下來,我們需要創建一個使用用戶ID並返回相應用戶對象的User_loader。這是一個示例:
>密碼哈希
>通常,密碼首先在註冊過程中進行哈希,並存儲在數據庫中。然後,每次用戶登錄時,它們的密碼再次被哈希進行了哈希,並將其與數據庫中存儲的Hashed密碼進行了比較。如果兩個密碼匹配,則對用戶進行身份驗證並訪問了該應用程序。
>燒瓶具有稱為燒瓶-bcrypt的擴展名,可幫助實現此功能。它具有兩個主要功能:generate_password_hash()和check_password_hash()。
> theGenerate_password_hash()函數將用戶的密碼作為參數並返回哈希密碼。這通常在註冊邏輯中使用。
>> check_password_hash()函數將密碼和哈希密碼作為參數,如果兩個密碼匹配,則返回true,或者如果不匹配,則false。在授予登錄視圖
>之前,這是調用的>視圖是用於生成HTML,JSON或發送給用戶瀏覽器的其他數據的燒瓶框架的一部分。在此代碼段中,我們將創建一個視圖,該視圖接受用戶的輸入,並將詳細信息添加到數據庫中:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
這是代碼的分解:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
然後,它查詢使用提供的用戶名的用戶數據庫。如果找到了帶有所提供用戶名的用戶並匹配密碼,則將執行此塊內的代碼。
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
在第一行 - @app.route(' /login',methods = ['get','post']): - 我們正在使用定義URL路徑路由的裝飾器。該路線接受get和發布請求。當向該路由提出請求時,將執行關聯的功能,login()。
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>login()函數首先檢查請求方法是否是發布:
>一次,它已確認它是郵政請求,它以登錄表單檢索用戶輸入的值:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>然後,它對提供的用戶名的用戶查詢數據庫:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>但是,如果請求方法未發布或詳細信息不正確,則將登錄。 html模板:
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>>使用受保護的視圖創建註銷邏輯
在大多數應用程序中,如果沒有登錄用戶,則某些頁面是無法訪問的。這包括交易歷史記錄,草稿和註銷頁面等頁面。 Blask-Login提供了一種使用login_required Decorator限制對身份驗證用戶的訪問的方便方法。這是其工作原理的細分。
以下是其工作原理的細分:
>
db <span>= SQLAlchemy(app)</span>>就像在登錄視圖中, @app.route(' /lokout')定義了url路徑 /註銷的路由。
接下來,我們添加一個login_required裝飾器,該裝飾器可確保必須登錄用戶才能訪問註銷路由。如果未登錄用戶並嘗試訪問此路線,則將其重定向到登錄頁面。
<span>if __name__ == '__main__': </span> db<span>.create_all() </span> app<span>.run(debug=True)</span>在註銷函數中,logout_user()被調用。此功能由燒瓶 - login提供,用於記錄當前用戶。
登錄用戶後,該功能將其重定向到使用重定向(url_for('login'))。
>您可以看到本教程的完整代碼,並在本文的GitHub存儲庫中了解有關其實現的更多信息。 flask-login如何通過用戶會話cookie
管理用戶會話用戶使用燒瓶login登錄到網站時,服務器會生成會話cookie並將其發送給用戶的瀏覽器。瀏覽器存儲會話cookie,並將其包含在服務器的所有請求中。服務器使用會話cookie識別用戶及其會話狀態。
> 例如,如果用戶已登錄並訪問受燒瓶login保護的頁面,則Blask-Login將檢查會話cookie,以查看用戶是否已驗證。如果用戶經過身份驗證,則燒瓶login將從數據庫中加載用戶的個人資料信息,並將其用於視圖。如果未對用戶進行身份驗證,則燒瓶-login將將用戶重定向到登錄頁面。>用戶登錄網站時,服務器從用戶的瀏覽器中刪除了會話cookie,該瀏覽器終止了用戶會話。
結論
燒瓶提供了各種功能,可以解決身份驗證的不同方面,從用戶會話管理到授權。通過使用這些功能,您可以實現適合應用程序特定需求的健壯且安全的身份驗證系統。
以上是如何使用燒瓶-login執行用戶身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!