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

如何使用燒瓶-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>{self.username}</user></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>{self.username}</user></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>{self.username}</user></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
    為什麼數組通常比存儲數值數據列表更高?為什麼數組通常比存儲數值數據列表更高?May 05, 2025 am 12:15 AM

    ArraySareAryallyMoremory-Moremory-forigationDataDatueTotheIrfixed-SizenatureAntatureAntatureAndirectMemoryAccess.1)arraysStorelelementsInAcontiguxufulock,ReducingOveringOverheadHeadefromenterSormetormetAdata.2)列表,通常

    如何將Python列表轉換為Python陣列?如何將Python列表轉換為Python陣列?May 05, 2025 am 12:10 AM

    ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

    您可以將不同的數據類型存儲在同一Python列表中嗎?舉一個例子。您可以將不同的數據類型存儲在同一Python列表中嗎?舉一個例子。May 05, 2025 am 12:10 AM

    Python列表可以存儲不同類型的數據。示例列表包含整數、字符串、浮點數、布爾值、嵌套列表和字典。列表的靈活性在數據處理和原型設計中很有價值,但需謹慎使用以確保代碼的可讀性和可維護性。

    Python中的數組和列表之間有什麼區別?Python中的數組和列表之間有什麼區別?May 05, 2025 am 12:06 AM

    Pythondoesnothavebuilt-inarrays;usethearraymoduleformemory-efficienthomogeneousdatastorage,whilelistsareversatileformixeddatatypes.Arraysareefficientforlargedatasetsofthesametype,whereaslistsofferflexibilityandareeasiertouseformixedorsmallerdatasets.

    通常使用哪種模塊在Python中創建數組?通常使用哪種模塊在Python中創建數組?May 05, 2025 am 12:02 AM

    theSostCommonlyusedModuleForCreatingArraysInpyThonisnumpy.1)NumpyProvidEseffitedToolsForarrayOperations,Idealfornumericaldata.2)arraysCanbeCreatedDusingsnp.Array()for1dand2Structures.3)

    您如何將元素附加到Python列表中?您如何將元素附加到Python列表中?May 04, 2025 am 12:17 AM

    toAppendElementStoApythonList,usetheappend()方法forsingleements,Extend()formultiplelements,andinsert()forspecificpositions.1)useeAppend()foraddingoneOnelementAttheend.2)useextendTheEnd.2)useextendexendExendEnd(

    您如何創建Python列表?舉一個例子。您如何創建Python列表?舉一個例子。May 04, 2025 am 12:16 AM

    TocreateaPythonlist,usesquarebrackets[]andseparateitemswithcommas.1)Listsaredynamicandcanholdmixeddatatypes.2)Useappend(),remove(),andslicingformanipulation.3)Listcomprehensionsareefficientforcreatinglists.4)Becautiouswithlistreferences;usecopy()orsl

    討論有效存儲和數值數據的處理至關重要的實際用例。討論有效存儲和數值數據的處理至關重要的實際用例。May 04, 2025 am 12:11 AM

    金融、科研、医疗和AI等领域中,高效存储和处理数值数据至关重要。1)在金融中,使用内存映射文件和NumPy库可显著提升数据处理速度。2)科研领域,HDF5文件优化数据存储和检索。3)医疗中,数据库优化技术如索引和分区提高数据查询性能。4)AI中,数据分片和分布式训练加速模型训练。通过选择适当的工具和技术,并权衡存储与处理速度之间的trade-off,可以显著提升系统性能和可扩展性。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

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

    熱工具

    Atom編輯器mac版下載

    Atom編輯器mac版下載

    最受歡迎的的開源編輯器

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),