Django Rest Framework 中的 JWT 和自定义身份验证

问题描述

我编写了一个非常基本的自定义身份验证类,以便为我的自定义身份验证需求实现简单的 JWT 库。

generate tokens manually 然后将访问令牌发送到我的 API。认情况下,这已经足够了,但是由于我不使用认的 Django 用户模型,所以我得到“找不到用户”。这是因为我需要实现自定义身份验证后端。

我需要读取该令牌,以便使用给定的用户 ID 查询数据库并检查该令牌是否也有效。在我的例子中,我有固定的数字 2。

enter image description here

class ExampleAuthentication(authentication.BaseAuthentication):
    def authenticate(self,request):
        try:
            user = vAuthUser.objects.get(pk=2) #this should receive the user_id from the token
        except:
            raise AuthenticationFailed('No such user')

        return (user,None)

我的 API 看起来像:

class MyAPI(APIView):
    authentication_classes = (ExampleAuthentication,)
    permission_classes = (IsAuthenticated,)

   def get()...

解决方法

试试这个:

<a href="whateverhref.com" class="link">Try hovering over this!</a>

在这里,我将原始访问令牌提供给 JWTAuthentication 类的 from rest_framework_simplejwt.authentication import JWTAuthentication from rest_framework_simplejwt.tokens import RefreshToken from django.contrib.auth.models import User user = User.objects.first() refresh = RefreshToken.for_user(user) raw_token = str(refresh.access_token) jwt_a = JWTAuthentication() validated_token = jwt_a.get_validated_token(raw_token) repr(validated_token) print(validated_token["user_id"]) 方法。它返回一个包含以下键的字典:get_validated_token()token_typejtiuser_id 和它们的关联值。
我的示例使用了默认的 Django 用户模型,但它应该适用于您的自定义模型。
还有更多有用的方法,例如 exp。也检查 this documentthis one