Flask中的使用者身份驗證和授權
隨著Web應用程式的廣泛使用,安全性和資料保護已成為Web應用程式開發的重要議題。為了確保Web應用程式的安全性,需要進行使用者身份驗證和授權。 Flask作為一個流行的Web開發框架,提供了許多用於實現使用者身份驗證和授權的機制。
- 使用者驗證
使用者驗證是指在使用者存取網路應用程式的時候,透過一定的身分驗證方式來決定使用者的身分是否合法。 Flask提供了很多內建的方法來實現使用者身份驗證。
1.1. HTTP基本認證
HTTP基本認證是一種基於HTTP協定的驗證機制,它要求使用者在請求資源時提供使用者名稱和密碼進行驗證。 Flask內建了HTTP基本認證的功能,透過 Flask-BasicAuth 擴充功能可以輕易地實現基本認證功能。
使用 Flask-BasicAuth 擴展,需要在 Flask 應用中安裝並建立一個 BasicAuth 對象,然後將其裝飾在需要進行基本認證的路由函數上。範例程式碼如下:
from flask import Flask from flask_basicauth import BasicAuth app = Flask(__name__) app.config['BASIC_AUTH_USERNAME'] = 'username' app.config['BASIC_AUTH_PASSWORD'] = 'password' basic_auth = BasicAuth(app) @app.route('/') @basic_auth.required def index(): return 'Hello, World!'
上面的程式碼中,BasicAuth的兩個設定項用於設定使用者名稱和密碼。路由函數上的 @basic_auth.required 裝飾器實作了基本認證的功能。
1.2. 表單認證
表單認證是Web應用程式中最常見的驗證方式之一。在Flask中實作表單認證一般需要使用 Flask-Login 擴充。
Flask-Login 擴充功能提供了一個 UserMixin 類,可以用來表示使用者資料模型。範例程式碼如下:
from flask_login import UserMixin class User(UserMixin): def __init__(self, id, username, password): self.id = id self.username = username self.password = password def get_id(self): return str(self.id)
範例程式碼中,User 類別繼承自 flask_login.UserMixin 類,其中包含了常用的使用者認證方法。在 Flask-Login 擴充功能中,還需要提供一個使用者載入函數,用於載入使用者資料。範例程式碼如下:
from flask_login import login_user, LoginManager from flask import Flask, render_template, redirect, url_for from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.secret_key = 'your secret key' login_manager = LoginManager(app) # 用户数据 users = { 1: {'username': 'user1', 'password': 'password1'}, 2: {'username': 'user2', 'password': 'password2'}, 3: {'username': 'user3', 'password': 'password3'}, } # 实现用户加载函数 @login_manager.user_loader def load_user(user_id): user = users.get(int(user_id)) if user: return User(user_id, user['username'], user['password']) return None # 实现登录视图 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] for user_id, user_data in users.items(): if user_data['username'] == username and check_password_hash(user_data['password'], password): user = User(user_id, username, password) login_user(user) return redirect(url_for('index')) return 'Invalid username/password combination' return render_template('login.html') # 实现需要登录才能访问的视图 @app.route('/') @login_required def index(): return 'Hello, World!'
範例程式碼中,使用 Flask-Login 擴充功能需要對 Flask 應用進行初始化並設定 secret_key,然後透過 login_manager.user_loader 裝飾器實作使用者載入函數。最後,在需要登入才能存取的視圖函數上使用 @login_required 裝飾器即可實現登入控制。
- 使用者授權
使用者授權是指確定哪些使用者可以存取哪些資源。在Flask中實作使用者授權需要使用 Flask-Principal 擴充功能。
Flask-Principal 擴充功能提供了 Permission、Role 和 Identity 三個類,可以用來定義使用者存取資源的權限。 Permission 表示請求存取某個資源的權限,Role 表示使用者身分或group,Identity 表示某個使用者的識別資訊。
範例程式碼如下:
from flask_principal import Principal, Identity, AnonymousIdentity, Permission, RoleNeed app = Flask(__name__) principal = Principal(app) # 定义角色,这里假设有管理员和普通用户两种角色 admin_role = RoleNeed('admin') user_role = RoleNeed('user') # 定义权限 admin_permission = Permission(admin_role) user_permission = Permission(user_role) # 定义 Identity,需要通过 Identity 的认证才能访问需要权限管理的路由 @app.before_request def before_request(): identity = Identity(anonymous=True) if current_user.is_authenticated: identity = Identity(current_user.id) if current_user.is_admin: identity.provides.add(admin_role) else: identity.provides.add(user_role) principal.identity = identity # 在需要受权限控制的路由上使用 requires(permission) 装饰器 @app.route('/admin') @admin_permission.require(http_exception=403) def admin_index(): return 'Hello, Admin!' @app.route('/user') @user_permission.require(http_exception=403) def user_index(): return 'Hello, User!'
在範例程式碼中,定義了兩個 Role,即 admin_role 和 user_role。每個 Role 均可定義一個 Permission,用於控制相關操作存取需求的權限。在 before_request 函數中,實作了 Identity 的認證,並根據具體情況加入不同的 Role。在需要權限管理的路由上使用 requires(permission) 裝飾器即可實現權限控制。
Flask提供了許多用於實現使用者身份驗證和授權的方法。掌握這些方法可以幫助開發者提升Web應用程式的安全性。同時,開發者也需要仔細考慮使用哪種方法來實現使用者身份驗證和授權,以確保應用程式的安全性和使用者資料的保護。
以上是Flask中的使用者身份驗證和授權的詳細內容。更多資訊請關注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)

如何利用React和Flask建構簡單易用的網路應用引言:隨著網路的發展,網路應用的需求也越來越多樣化和複雜化。為了滿足使用者對於易用性和效能的要求,使用現代化的技術堆疊來建立網路應用變得越來越重要。 React和Flask是兩個在前端和後端開發中非常受歡迎的框架,它們可以很好的結合在一起,用來建立簡單易用的網路應用。本文將詳細介紹如何利用React和Flask

在iOS17中,Apple在其行動作業系統中引入了幾項新的隱私和安全功能,其中之一是能夠要求對Safari中的隱私瀏覽標籤進行二次身份驗證。以下是它的工作原理以及如何將其關閉。在運行iOS17或iPadOS17的iPhone或iPad上,如果您在Safari中打開了任何“隱私瀏覽”選項卡,然後退出會話或應用程序,Apple的瀏覽器現在需要面容ID/TouchID身份驗證或密碼才能再次訪問它們。換句話說,如果有人在解鎖您的iPhone或iPad時拿到了它,他們仍然無法在不知道您的密碼的情況下查看

當我們不想要繼續使用目前的win10企業版2016長期服務版的時候可以選擇切換成專業版,方法也很簡單,只需要改一些內容然後進行系統鏡像的安裝就可以了。 win10企業版2016長期服務版怎麼改專業版1、按下win+R,然後輸入「regedit」2、直接在上面的網址列裡面貼上下面的這個路徑:電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion3 、然後找到EditionID,將裡面的內容替換成「professional」確

Django和Flask都是PythonWeb框架中的佼佼者,它們都有著自己的優點和適用場景。本文將對這兩個框架進行比較分析,並提供具體的程式碼範例。開發簡介Django是一個全功能的Web框架,它的主要目的是為了快速開發複雜的Web應用。 Django提供了許多內建的功能,例如ORM(物件關聯映射)、表單、認證、管理後台等。這些功能使得Django在處理大型

從零開始,手把手教你安裝Flask和快速建立個人部落格作為一個喜歡寫作的人來說,擁有個人部落格是非常重要的。而Flask作為一個輕量級的PythonWeb框架,可以幫助我們快速建立一個簡潔而功能完善的個人部落格。在本文中,我將從零開始,手把手教你如何安裝Flask並快速建立個人部落格。第一步:安裝Python和pip在開始之前,我們需要先安裝Python和pi

Flask框架安裝教學:一步步教你如何正確安裝Flask框架,需要具體程式碼範例引言:Flask是一款簡潔且靈活的PythonWeb開發框架。它易於學習、易於使用,並且具有強大的功能。本文將帶領您一步步正確地安裝Flask框架,並提供詳細的程式碼範例供參考。第一步:安裝Python在安裝Flask框架之前,首先需要確保您的電腦上安裝了Python。您可以從P

Flask應用部署:GunicornvsuWSGI的比較引言:Flask作為一種輕量級的PythonWeb框架,受到了許多開發者的喜愛。在將Flask應用程式部署到生產環境時,選擇適合的伺服器閘道介面(ServerGatewayInterface,簡稱SGI)是至關重要的決策。 Gunicorn和uWSGI是兩種常見的SGI伺服器,本文將對它們進行詳細的

FlaskvsFastAPI:高效開發WebAPI的最佳選擇引言:在現代的軟體開發中,WebAPI已經成為了不可或缺的一部分。它們能夠提供數據和服務,使得不同的應用程式之間能夠進行通訊和互通。而在選擇開發WebAPI的框架時,Flask和FastAPI是兩個備受關注的選擇。這兩個框架都非常流行,而且各有優勢。在本文中,我們將對Fl
