如何使用燒瓶-login執行用戶身份驗證
>在本文中,我們將查看Blask-Login提供的各種功能以及如何使用它們為您的Web應用程序創建安全的用戶登錄功能。到本文結尾,您將對如何在燒瓶應用程序中實現安全用戶身份驗證有很好的了解。
>
鑰匙要點 要遵循本文的長期,您需要以下內容: 顯然,您還需要訪問Web瀏覽器。
用燒瓶 - 燃料蛋白:燒瓶 - 燃料蛋白簡化身份驗證,簡化了在燒瓶應用程序中的用戶身份驗證的實現。它提供了必不可少的功能,例如用戶會話管理,輕鬆登錄/註銷功能以及與數據庫無縫集成的用戶加載程序回調。這有助於有效地管理用戶會話並處理身份驗證過程。
>
安全密碼處理和用戶會話管理:我們將使用燒瓶-bcrypt詳細介紹密碼安全性在哈希密碼中,以及Blask-Login如何通過會話cookie管理用戶會話。這樣可以確保用戶憑據被安全存儲並準確跟踪用戶會話,從而增強了應用程序的整體安全性。
>先決條件
入門
為了充分利用燒瓶登錄模塊,我們需要安裝燒瓶login和其他必要的依賴項。這些庫提供了改善應用程序功能所需的必要功能和工具。要安裝它們,請打開命令提示符或終端並執行以下pip命令:pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
- >安裝完成後,它將在您使用的目錄中自動下載燒瓶登錄。 >
- 注意:在撰寫本文時,解決最新版本的Blask和Werkzeug中的依賴項存在一個小問題。要解決此問題,您必須強制安裝Werkzeug版本2.3.0版本,因為它是唯一已知的版本。 >安裝了依賴項後,您需要使用燒瓶應用程序初始化它們:
在上面的代碼段中,我們還初始化了應用程序中的LoginManager對象。 LoginManager是燒瓶 - login的擴展,用於設置用於處理用戶會話的必要配置。
創建用戶模型 模型是您要在應用程序中使用的數據結構的表示。它定義瞭如何在系統中組織,存儲和操縱數據。通常,模型與事先遵循定義結構的數據庫一起使用。對於我們的應用程序,我們有以下數據:
>- 唯一的ID
- >用戶名
- >密碼(哈希)
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
>您還可以根據您的項目範圍添加其他屬性,例如電子郵件地址或個人資料圖片。
創建數據庫
>定義用戶模型後,您需要創建一個數據庫,該數據庫將存儲我們在上一個模型中創建的數據結構。 在本文中,我們將使用SQLite數據庫。這是因為SQLITE是輕巧且無服務器的數據庫引擎。這使設置和使用易於使用,因為它不需要單獨的安裝。對於中小型應用程序,這也是一個不錯的選擇。
>這是我們應用程序中使用SQLITE數據庫的步驟的細分:
>使用SQLite數據庫,您必須在燒瓶應用程序配置中設置URI。這通常是在頂部和其他配置一起完成的。這是您可以使用的片段:
在此片段中,/// ...指示文件的相對路徑 - site.db-這是我們用於SQLITE數據庫文件的名稱。此名稱可以更改為您喜歡的任何東西。- >
接下來,您必須使用此片段初始化燒瓶-Sqlalchemy Orm:
<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>
登入後複製登入後複製登入後複製為了創建此數據庫,我們必須使用Create_all方法初始化數據庫:
-
此代碼通常放置在Python腳本的末尾或用於初始化數據庫的單獨腳本中。運行腳本後,將根據我們先前定義的模型創建數據庫文件。
<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>
登入後複製登入後複製登入後複製在這種情況下,如果尚不存在,則代碼將使用用戶表創建一個site.db文件。 site.db文件通常包含在一個名為 /instance /。
的文件夾中 -
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
登入後複製登入後複製登入後複製接下來,我們需要創建一個使用用戶ID並返回相應用戶對象的User_loader。這是一個示例:
>密碼哈希
密碼哈希是一種安全措施,它在將用戶密碼存儲在數據庫中之前存儲了密碼的加密表示。這樣,即使應用程序的安全性損害了,也很難獲取實際密碼。
>通常,密碼首先在註冊過程中進行哈希,並存儲在數據庫中。然後,每次用戶登錄時,它們的密碼再次被哈希進行了哈希,並將其與數據庫中存儲的Hashed密碼進行了比較。如果兩個密碼匹配,則對用戶進行身份驗證並訪問了該應用程序。
>如何使用Blask-bcrypt
進行哈希和驗證密碼燒瓶具有稱為燒瓶-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>
>一次,它已確認它是郵政請求,它以登錄表單檢索用戶輸入的值:
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<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
在大多數應用程序中,如果沒有登錄用戶,則某些頁面是無法訪問的。這包括交易歷史記錄,草稿和註銷頁面等頁面。 Blask-Login提供了一種使用login_required Decorator限制對身份驗證用戶的訪問的方便方法。這是其工作原理的細分。
接下來,您必須將login_required Decorator添加到要保護的任何路線中。例如,讓我們創建一個只有在用戶登錄時才能訪問的註銷頁面:
>以下是其工作原理的細分:
>
db <span>= SQLAlchemy(app)</span>
接下來,我們添加一個login_required裝飾器,該裝飾器可確保必須登錄用戶才能訪問註銷路由。如果未登錄用戶並嘗試訪問此路線,則將其重定向到登錄頁面。
<span>if __name__ == '__main__': </span> db<span>.create_all() </span> app<span>.run(debug=True)</span>
登錄用戶後,該功能將其重定向到使用重定向(url_for('login'))。
- >因此,當用戶訪問 /註銷路由時,燒瓶 - login確保它們已登錄(@login_required),將其註銷並將其重定向到登錄頁面。這有助於安全地處理燒瓶應用程序中的用戶註銷。 login_required Decorator應用於 /受保護的路線,表明只有身份驗證的用戶才能訪問它。如果用戶試圖訪問受保護的頁面而不登錄,則燒瓶將其重定向到登錄頁面。
- 添加模板
- 瓶中的 模板允許您使用HTML頁面來定義網站的外觀。要在我們的app.py文件中充分實現邏輯,我們將創建下圖所示的html頁面。
- >
>您可以看到本教程的完整代碼,並在本文的GitHub存儲庫中了解有關其實現的更多信息。 flask-login如何通過用戶會話cookie
管理用戶會話>用戶會話是一個系統,用於在用戶登錄時跟踪和更新用戶信息。 Flask-Login通過在用戶的瀏覽器上存儲會話cookie來管理這些會話。會話cookie是一小部分數據,其中包含用於用戶會話的唯一標識符。
>用戶使用燒瓶login登錄到網站時,服務器會生成會話cookie並將其發送給用戶的瀏覽器。瀏覽器存儲會話cookie,並將其包含在服務器的所有請求中。服務器使用會話cookie識別用戶及其會話狀態。
> 例如,如果用戶已登錄並訪問受燒瓶login保護的頁面,則Blask-Login將檢查會話cookie,以查看用戶是否已驗證。如果用戶經過身份驗證,則燒瓶login將從數據庫中加載用戶的個人資料信息,並將其用於視圖。如果未對用戶進行身份驗證,則燒瓶-login將將用戶重定向到登錄頁面。>用戶登錄網站時,服務器從用戶的瀏覽器中刪除了會話cookie,該瀏覽器終止了用戶會話。
結論
燒瓶提供了各種功能,可以解決身份驗證的不同方面,從用戶會話管理到授權。通過使用這些功能,您可以實現適合應用程序特定需求的健壯且安全的身份驗證系統。
以上是如何使用燒瓶-login執行用戶身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。
