Logo
Section 1 / 3

简介

了解本课程的先决条件、结构和目标。

导入

简介

了解本课程的先决条件、结构和目标。

先修要求

要学习本课程,学习者应熟悉 Python 编程语言、Django 以及 Django REST 框架的基础知识。

课程目标

在本课程中,我们将学习如何:

  • 使用 Django REST API 框架注册自定义用户。
  • 用户注册后发送激活邮件。
  • 使用 Django REST API 框架和 Simple JWT 实现用户登录。
  • 使用 Django REST 框架重置用户密码。

JSON Web Token

JSON Web Token (JWT) 是一种用于访问受保护资源时的身份验证令牌,用于验证用户身份的真实性。在本项目中,我们将使用它来保护部分接口。

JWT 包含两种类型的令牌:

  • 访问令牌(Access tokens):用于请求受保护的视图。这些视图需要用户已通过身份验证才能访问。
  • 刷新令牌(Refresh tokens):用于请求新的 access token。

以下是一个示例 JWT:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU1MjA3OTQ0LCJpYXQiOjE2NTUyMDc2NDQsImp0aSI6IjQxYjQ4ZGI2YTQ0ZTRhN2I4OTQ3ZjA2MTczMzFhMTM3IiwidXNlcl9pZCI6Mjl9.AVK8C2Qv9YZHcYMKsfcCAQjyhEz2I7Y_7Ebxq8pwE30

access 令牌和 refresh 令牌具有相同的结构,均由三部分组成,以英文句点分隔。

...
JWT 的三个组成部分

如上图所示:

  • 第一部分称为 header,包含编码所用算法类型和令牌类型信息。
  • 第二部分称为 payload,是希望隐藏在令牌中的数据。在此场景中,我们将存储 token_type、过期时间、签发时间、唯一标识符以及对应的用户 ID。
  • 第三部分为 signature,它将编码后的 header、编码后的 payload、一个密钥以及 header 中指定的算法进行组合并签名。

JWT 认证流程

在 Django 中创建新用户后,系统会自动为其登录,并发放一个 access token 和一个 refresh token。这与已有用户使用正确凭证登录的过程类似。

access token 的有效期较短(例如五分钟),而 refresh token 的有效期较长(例如 24 小时),但两者的时间长度均可根据需求调整。

当用户尝试访问受保护的视图时,必须提供 access token。如果该令牌已过期,用户可使用 refresh token 获取一个新的 access token,然后继续访问受保护的资源。这种方式可以有效保障受保护接口的安全性。

在本课程中,我们将使用 Simple JWT 来实现上述功能。Simple JWT 是一个 Django 插件,帮助我们轻松集成 JWT 认证到 Django REST API 中。

...
JWT 认证流程

使用 JWT 相比基于会话认证的优势

  • 可扩展性:与存储在服务器端的会话不同,JWT 存储在客户端。因此,大量用户可以快速获取自己的令牌,不会造成延迟。
  • 多设备访问:一个 JWT 可以在多个服务器间共享使用,而传统的会话机制在不同服务器之间可能无法共享会话数据。

教学方法

在整个课程中,我们提供了代码示例,并附有详细的解释说明和代码练习环境,以便学员在每节课后动手实践所学内容。通过在练习环境中不断实践,你将能够达成每一章的学习目标。

创建自定义用户模型