首頁 >後端開發 >Python教學 >如何使用燒瓶-login執行用戶身份驗證

如何使用燒瓶-login執行用戶身份驗證

Lisa Kudrow
Lisa Kudrow原創
2025-02-09 08:47:13421瀏覽

如何使用燒瓶-login執行用戶身份驗證

>在本文中,我們將查看Blask-Login提供的各種功能以及如何使用它們為您的Web應用程序創建安全的用戶登錄功能。到本文結尾,您將對如何在燒瓶應用程序中實現安全用戶身份驗證有很好的了解。

> 身份驗證是任何Web應用程序的重要組成部分,允許用戶訪問數據或資源,因為它可以確保只有合適的人才能訪問敏感信息。這也可以在燒瓶中使用燒瓶。

>

鑰匙要點

用燒瓶 - 燃料蛋白:燒瓶 - 燃料蛋白簡化身份驗證,簡化了在燒瓶應用程序中的用戶身份驗證的實現。它提供了必不可少的功能,例如用戶會話管理,輕鬆登錄/註銷功能以及與數據庫無縫集成的用戶加載程序回調。這有助於有效地管理用戶會話並處理身份驗證過程。

>
    安全密碼處理和用戶會話管理:我們將使用燒瓶-bcrypt詳細介紹密碼安全性在哈希密碼中,以及Blask-Login如何通過會話cookie管理用戶會話。這樣可以確保用戶憑據被安全存儲並準確跟踪用戶會話,從而增強了應用程序的整體安全性。
  • 實際實施指南:我們提供了一個綜合指南,以設置和使用燒瓶login,包括創建用戶模型,配置數據庫(SQLITE),為用戶註冊和登錄創建視圖,並使用受保護的路由實現註銷邏輯。它提供了一種實用的方法,可以在燒瓶應用程序中構建安全的用戶身份驗證系統,即使對於那些新的燒瓶或Web應用程序開發的人也可以訪問。
  • >
  • 為什麼使用燒瓶 - login?
  • 燒瓶login具有許多功能和功能,可輕鬆在燒瓶應用程序中無縫執行身份驗證。以下是使用燒瓶 - login的一些好處:
  • >用戶會話管理。 Blask-Login處理用戶會議的創建和破壞。它還可以將當前用戶的ID存儲在會話中,以便您可以輕鬆地檢查用戶是否已登錄。
  • >
  • 登錄和註銷功能。燒結儀提供內置的登錄和註銷功能。這些功能負責所有重要的過程,例如創建和破壞會話並將用戶重定向到適當的頁面。
  • >用戶加載程序回調。 Blask-Login允許您定義用戶加載程序回調。此回調用於為當前會話加載用戶對象。如果您使用數據庫來存儲用戶信息,這將很有用。
  • 身份驗證和授權。 Blask-Login使您可以輕鬆地在您的應用程序中實現身份驗證和授權。您可以使用燒瓶login來保護特定的頁面或路線,並授予用戶對應用程序的不同級別訪問。

>先決條件

要遵循本文的長期,您需要以下內容:

>
  • python和燒瓶語法的知識
  • html和CSS
  • 的基本知識
  • python版本3和安裝燒瓶

顯然,您還需要訪問Web瀏覽器。

入門

為了充分利用燒瓶登錄模塊,我們需要安裝燒瓶login和其他必要的依賴項。這些庫提供了改善應用程序功能所需的必要功能和工具。要安裝它們,請打開命令提示符或終端並執行以下pip命令:>

這是這些庫中每個庫中的內容的細分:>
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
flask-bcrypt:添加bcrypt hashing以供密碼安全

  • >安裝完成後,它將在您使用的目錄中自動下載燒瓶登錄。
  • >
  • 注意:在撰寫本文時,解決最新版本的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數據庫文件的名稱。此名稱可以更改為您喜歡的任何東西。
  1. >
    <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)。
  2. 為了創建此數據庫,我們必須使用Create_all方法初始化數據庫:
  3. <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 /。

    的文件夾中
  4. app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>

    接下來,我們需要創建一個使用用戶ID並返回相應用戶對象的User_loader。這是一個示例:

    如何使用燒瓶-login執行用戶身份驗證>密碼哈希

  5. 密碼哈希是一種安全措施,它在將用戶密碼存儲在數據庫中之前存儲了密碼的加密表示。這樣,即使應用程序的安全性損害了,也很難獲取實際密碼。
>

>通常,密碼首先在註冊過程中進行哈希,並存儲在數據庫中。然後,每次用戶登錄時,它們的密碼再次被哈希進行了哈希,並將其與數據庫中存儲的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>

這是代碼的分解:>

在第一行,我們為URL路徑 /登錄定義了路由。該路線接受get和發布請求。與路由關聯的登錄()函數將在提出請求時執行。
    >
  • 接下來,我們確認請求方法是否是郵政方法:
  • 確認後,該函數會以登錄表單檢索用戶輸入的值:
    <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>
  • 如果驗證了用戶名和密碼,則使用Blask-Login的login_user和重定向功能授予用戶訪問:
  • <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模板:
  • 本質上,它可以檢查輸入的憑據是否有效,將用戶記錄在其中,並將其重定向到歡迎頁面,如果成功。如果登錄不成功或是GET請求,則它將為用戶輸入其憑據。
  • app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
    >使用受保護的視圖創建註銷邏輯

    在大多數應用程序中,如果沒有登錄用戶,則某些頁面是無法訪問的。這包括交易歷史記錄,草稿和註銷頁面等頁面。 Blask-Login提供了一種使用login_required Decorator限制對身份驗證用戶的訪問的方便方法。這是其工作原理的細分。

  • 要利用此功能,您必須從燒瓶 - login中導入login_required Decorator:

    接下來,您必須將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'))。

      >因此,當用戶訪問 /註銷路由時,燒瓶 - 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中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn