📜  使用 Django REST 框架实现令牌认证(1)

📅  最后修改于: 2023-12-03 14:49:38.797000             🧑  作者: Mango

使用 Django REST 框架实现令牌认证

在开发 Web 应用程序时,通常需要进行身份验证和授权。这意味着要检查用户的身份并确保他们正在执行他们有权执行的操作。为此,可以使用 Django REST 框架提供的令牌认证功能。

什么是令牌认证?

令牌认证是从客户端向服务器发送令牌来验证其身份的过程。在基于令牌的身份验证模型中,客户端先通过用户名和密码进行身份验证,然后服务器返回一个加密令牌。客户端随后将该令牌在每个请求中使用,以证明它已经通过了身份验证。

通常情况下,令牌是由服务器生成的,然后通过 HTTP 响应头或响应主体将其发送回客户端。客户端随后将令牌存储在本地,然后在发送请求时将其包含在每个请求中。

如何实现令牌认证?

Django REST 框架提供了简单的方式来实现令牌认证。下面是一些步骤:

步骤 1 - 安装 Django REST 框架

要开始使用 Django REST 框架,你需要先安装它。你可以使用以下命令来安装 Django REST 框架。

pip install djangorestframework
步骤 2 - 添加应用程序到 INSTALLED_APPS

在 settings.py 文件中添加应用程序到 INSTALLED_APPS 数组中。

INSTALLED_APPS = [
    ...
    'rest_framework',
    ...
]
步骤 3 - 配置认证类

在 setting.py 文件中配置认证类。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

这将添加 TokenAuthentication 认证类和 IsAuthenticated 权限类到框架中。

步骤 4 - 生成令牌

要生成令牌,可以使用 Django REST 框架提供的 Token 认证模型。

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response

class AuthTokenView(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        token, created = Token.objects.get_or_create(user=serializer.validated_data['user'])
        return Response({'token': token.key})
步骤 5 - 验证令牌

在视图中验证令牌,可以使用 Django REST 框架提供的 TokenAuthentication 方法。

from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from rest_framework.response import Response

class AuthenticatedView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request, format=None):
        user = request.user
        return Response({'user': user.username})

这里我们定义了一个受保护的 API 视图,并对其进行了身份验证和授权。

结论

如果你正在开发 Web 应用程序并需要进行身份验证和授权,那么令牌认证就是一种非常有效的方式。Django REST 框架提供了一种简单的方法来实现令牌认证,只需几个简单的步骤就可以添加身份验证和授权功能到你的应用程序中。