Skip to main content

用户登录接口实现

在web开发中,HTTP协议是一种无状态的协议,这意味着每次请求都是独立的,没有关联性。为了实现用户登录功能,传统的web开发中常使用Session来存储用户登录信息,并在每次请求前验证用户是否登录。然而,对于现代的前后端分离项目,我们通常使用JWT(Json Web Token)来实现用户认证。

图36-jwt示意图

JWT是一种开放的标准,定义了一种紧凑且安全的方式,用于在各方之间传递JSON对象。JWT的Token是经过数字签名的,因此能够被验证和信任。与Session不同,JWT的Token保存在用户端,减轻了服务器的压力。

以下是使用djoser模块实现JWT认证的配置和接口使用方法的介绍:

配置

  1. 安装djangorestframework_simplejwt模块:

    pip install djangorestframework_simplejwt
  2. 在项目的Settings配置文件中,设置REST Framework的授权方式为JWT:

    dx_movie/dx_movie/settings.py
    # DRF设置
    REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 12,
    'DEFAULT_FILTER_BACKENDS': (
    'django_filters.rest_framework.DjangoFilterBackend',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
    }


    SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('JWT',),
    }
  3. 配置路由,在全局urls.py文件中,添加路由,代码如下:

dx_movie/dx_movie/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from movie import views


router = DefaultRouter()
router.register(r'movie', views.MovieViewSet)
router.register(r'category', views.CategoryViewSet)


urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
path('api/', include('djoser.urls')),
path('api/', include('djoser.urls.jwt')),
]

JWT接口

以下是常用的JWT接口示例:

创建JWT

  • 请求方式:POST
  • URL:/auth/jwt/create/
  • 参数:
    • username:用户名
    • password:密码
  • 返回值:
    • refresh:用于刷新JWT Token的Refresh Token
    • access:用于访问受保护资源的Access Token

请求结果如下所示。 图36-创建jwt

注意

这个账号需要是激活成功的账号。

刷新JWT

  • 请求方式:POST
  • URL:/auth/jwt/refresh/
  • 参数:
    • refresh:刷新Token所需的Refresh Token
  • 返回值:
    • access:刷新后的Access Token

请求结果如下所示。 图36-刷新令牌

验证JWT

  • 请求方式:POST
  • URL:/auth/jwt/verify/
  • 参数:
    • token:待验证的Token
  • 返回值:成功验证返回空,验证失败会报错

请求结果如下图所示。

图36-验证jwt

通过使用JWT,我们可以在前后端分离的项目中实现用户认证功能。登录时生成JWT Token,并在需要验证用户身份的接口中携带该Token进行验证。

请注意,本文仅介绍了djoser模块中JWT认证的基本配置和常用接口,更多关于JWT的工作原理和详细使用方法,请参考官方文档或相关资料。

参考链接: