如何在 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 令牌身份验证