如何在 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 身份验证中的令牌的主要内容,如果未能解决你的问题,请参考以下文章