如何在 django rest 框架中验证 jwt 身份验证中的令牌

Posted

技术标签:

【中文标题】如何在 django rest 框架中验证 jwt 身份验证中的令牌【英文标题】:how to validate token in jwt authentication in django rest framework 【发布时间】:2021-10-27 12:33:59 【问题描述】:

如何在Simple JWT 身份验证中验证 JWT 令牌。如果令牌访问令牌已过期,我需要验证用户何时发送请求,以便将他重定向以刷新令牌。

serializers.py

class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        # The default result (access/refresh tokens)
        data = super(CustomTokenObtainPairSerializer, self).validate(attrs)
        # Custom data you want to include
        data.update('email': self.user.email)
        data.update('id': self.user.id)
        data.update('status':"success")
        # and everything else you want to send in the response
        return data

views.py

class CustomTokenObtainPairView(TokenObtainPairView):
    # Replace the serializer with your custom
    serializer_class = CustomTokenObtainPairSerializer

urls.py

from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView

urlpatterns = [
  
  
    path('token/', views.CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('token/verify/', TokenVerifyView.as_view(), name='token_verify'),
    
]

urlpatterns = format_suffix_patterns(urlpatterns)

【问题讨论】:

你能解释一下你有什么问题吗?代码有什么问题吗? 我需要在简单的 jwt 身份验证中添加一个中间件,因此用户第一次登录 je 会收到一个访问令牌和一个刷新令牌,并且当 je 尝试添加一个新的发布,他在请求中发送访问令牌,我需要先验证令牌是否未过期,如果过期则我将他重定向到刷新令牌端点,否则,他可以添加帖子,我需要这样做在简单的 jwt 中使用仅 http cookie,我搜索了很多,但我不知道我是否可以使用这个库来完成 【参考方案1】:

您必须在您的 settings.py 身份验证类中添加 jwt 身份验证中间件以用于 rest 框架。

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
         ...
)

【讨论】:

以上是关于如何在 django rest 框架中验证 jwt 身份验证中的令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何从 django rest 框架访问 jwt 令牌到 Angular 前端

使用 otp 获取 api 令牌的 Django REST 框架的 JWT 身份验证

使用 Django Rest 框架进行 JWT 令牌身份验证

Django rest 框架 JWT 和自定义身份验证后端

JSON:带有 django-rest-framework-json-api 和 JWT 的 API

Django Rest Framework JWT 未提供身份验证凭据