使用 Python SimpleJWT 实现 JWT 身份验证

在现代 web 应用中,身份验证是非常重要的。使用 JWT(JSON Web Tokens)是一种流行的身份验证方法。本文将向你展示如何使用 Python 的 SimpleJWT 实现 JWT 身份验证。我们将系统地分步进行。

整体流程

下面的表格展示了实现 JWT 身份验证的主要步骤:

步骤描述
1环境准备: 安装必要的包
2创建 Django 项目与应用
3配置 Django 设置
4创建用户模型与序列化器
5编写视图以生成和验证 JWT
6配置 URL 路由
7测试 JWT 功能

身份验证流程图

接下来,我们用流程图描绘出上述步骤的关系。

环境准备 创建 Django 项目与应用 配置 Django 设置 创建用户模型与序列化器 编写视图以生成和验证 JWT 配置 URL 路由 测试 JWT 功能

每一步的详细实现

1. 环境准备: 安装必要的包

在开始之前,确保你已经安装了 Django 和 djangorestframework-simplejwt。可以使用以下命令:

pip install djangorestframework djangorestframework-simplejwt
  • 1.
2. 创建 Django 项目与应用

使用 Django 创建一个新项目。

django-admin startproject myproject
cd myproject
django-admin startapp myapp
  • 1.
  • 2.
  • 3.
3. 配置 Django 设置

settings.py 文件中,添加 rest_frameworkmyappINSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    ...,
    'rest_framework',
    'myapp',
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

接下来,配置 REST 框架将使用 SimpleJWT 进行身份验证。

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
4. 创建用户模型与序列化器

首先,我们需要创建一个用户序列化器,来处理用户注册和获取 JWT 的请求。创建一个 serializers.py 文件。

# myapp/serializers.py
from django.contrib.auth import get_user_model
from rest_framework import serializers

User = get_user_model()

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
5. 编写视图以生成和验证 JWT

现在,我们来创建视图来处理用户登录及其 JWT 的生成。编辑 views.py 文件。

# myapp/views.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenVerifyView

# 获取 Token
class MyTokenObtainPairView(TokenObtainPairView):
    # 可以在这里添加自定义字段
    pass
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
6. 配置 URL 路由

最后,在 urls.py 中添加你的视图。

# myapp/urls.py
from django.urls import path
from .views import MyTokenObtainPairView

urlpatterns = [
    path('api/token/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

在项目的主 urls.py 中包含应用的 URL 路由。

# myproject/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
7. 测试 JWT 功能

可以使用 Postman 或 curl 等工具测试你的 API 接口。

生成 JWT:

curl -X POST  -d "username=yourusername&password=yourpassword"
  • 1.

如果成功,你将得到一个 JSON 响应,其中包含 accessrefresh token。

验证 JWT:

curl -X POST  -d '{"token": "your_access_token"}'
  • 1.

状态图

这里是JWT认证可能的状态图。

Valid credentials Access token expired Token invalid Refresh token request New access token issued Unauthenticated Authenticated TokenExpired TokenRefreshed

总结

在这篇文章中,我们通过简单的步骤演示了如何在 Django 应用中实现 SimpleJWT。我们从环境准备开始,逐步创建应用,配置设置,最终实现用户的 JWT 身份验证。希望这可以帮助你快速上手 JWT 身份验证。如果你对某一部分有疑问,随时提问!祝你在开发中一切顺利。