微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。