实现 token 认证
现在,我们需要更新身份验证系统以使用令牌。 第一步是更新我们的 DEFAULT_AUTHENTICATION_CLASSES 设置以使用 TokenAuthentication ,如下所示:
# blog_project/settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication', # new
],
}
我们保留 SessionAuthentication,因为我们的 Browsable API 仍需要它,但现在使用令牌在 HTTP 标头中来回传递身份验证凭据。
我们还需要添加 authtoken 应用,该应用会在服务器上生成令牌。 它包含在 Django REST Framework 中,但必须添加到我们的 INSTALLED_ APPS 设置中:
# blog_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 3rd-party apps
'rest_framework',
'rest_framework.authtoken', # new
# Local
'posts.apps.PostsConfig',
]
由于我们对 INSTALLED_APPS 进行了更改,因此我们需要同步数据库。 使用 Control + c 停止服务器。 然后运行以下命令。
(blogapi) $ python manage.py migrate
现在再次启动服务器。
(blogapi) $ python manage.py runserver
如果您访问 http://127.0.0.1:8000/admin/
上的 Django admin,则会看到顶部现在有一个 Tokens 部分。 确保您使用超级用户帐户登录才能访问。

单击令牌链接以转到令牌页面,网址为:http://127.0.0.1:8000/admin/authtoken/token/
。

当前没有令牌可能令人惊讶。 毕竟我们有现有用户。 但是,仅在有用于用户登录的 API 调用之后才生成令牌。我们尚未这样做,因此尚无令牌。 我们将很快!
终端
我们还需要创建端点,以便用户可以登录和注销。 为此,我们可以创建一个专用的用户应用程序,然后添加我们自己的网址,视图和序列化程序。 但是,用户身份验证是我们真正不想犯错误的领域。 并且由于几乎所有的 API 都需要此功能,因此可以使用一些优秀且经过测试的第三方程序包是有道理的。
值得注意的是,我们将结合使用 django-rest-auth 和 django-allauth 来简化操作。 对于使用第三方软件包,请不要感到难过。 它们存在是有原因的,甚至最好的 Django 专业人士始终都依赖它们。 不必重新设计轮子!