【问题标题】:JWT and custom authentication in Django Rest FrameworkDjango Rest Framework 中的 JWT 和自定义身份验证
【发布时间】:2021-04-04 12:56:33
【问题描述】:

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

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

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

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()...

【问题讨论】:

  • 那么您的问题到底是什么?不清楚你需要什么
  • 使用带有自定义身份验证的简单 JWT 无法正常工作。我生成了发送它的令牌,但是如何在自定义身份验证类中读取它以正确验证用户身份?

标签: python django django-rest-framework django-rest-framework-jwt


【解决方案1】:

试试这个:

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"])

在这里,我将原始访问令牌提供给 JWTAuthentication 类的 get_validated_token() 方法。它返回一个包含这些键的字典:token_typejtiuser_idexp,以及它们的关联值。
我在示例中使用了默认的 Django 用户模型,但它应该适用于您的自定义模型。
还有更多有用的方法,例如get_header()。检查this documentthis one

【讨论】:

    猜你喜欢
    • 2019-11-20
    • 2019-01-01
    • 2015-12-26
    • 1970-01-01
    • 2015-11-12
    • 2020-04-10
    • 2015-06-01
    • 2019-07-29
    • 2017-12-23
    相关资源
    最近更新 更多