gpt4 book ai didi

python - 向 DRF 简单 JWT 负载添加声明

转载 作者:行者123 更新时间:2023-12-03 21:13:30 32 4
gpt4 key购买 nike

使用 djangorestframework_simplejwt 库,当 POST 到自定义 View 时

#urls.py
path('api/token/', MyTokenObtainPairView.as_view(), name='token_obtain'),

#views.py
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer

我能够获得以下访问 token
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTkwOTEwNjg0LCJqdGkiOiI3M2MxYmZkOWNmMGY0ZjI3OTY4MGY0ZjhlYjA1NDQ5NyIsInVzZXJfaWQiOjExfQ.5vs0LmNGseU6rtq3vuQyApupxhQM3FBAoKAq8MUukIBOOYfDAV9guuCVEYDoGgK6rdPSIq2mvcSxkILG8OH5LQ

通过转到 https://jwt.io/ 我可以看到有效载荷当前
{
"token_type": "access",
"exp": 1590910684,
"jti": "73c1bfd9cf0f4f279680f4f8eb054497",
"user_id": 11
}

JWT

所以,我们可以看到 token 的第二部分是有效载荷——包含声明。

我已经探索了 how to add more information to the Response body ,现在想知道如何通过添加 iat claim 、用户名和今天的日期来自定义有效负载数据。

最佳答案

由于您已经为所需的 View (MyTokenObtainPairView) 创建了一个子类,并为其相应的序列化程序 (MyTokenObtainPairSerializer) 创建了一个子类,请将以下内容添加到序列化程序中

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):

...

@classmethod
def get_token(cls, user):
token = super().get_token(user)

# Add custom claims
token['iat'] = datetime.datetime.now()
token['user'] = user.username
token['date'] = str(datetime.date.today())

return token

然后,当您 POST 到同一位置时,您将获得这样的访问 token
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTkwOTE0MTk4LCJqdGkiOiJhZDZmNzZhZjFmOGU0ZWJlOGI2Y2Y5YjQ4MGQzZjY2MiIsInVzZXJfaWQiOjExLCJpYXQiOjE1OTA5MTc0OTgsInVzZXIiOiJ0aWFnbyIsImRhdGUiOiIyMDIwLTA1LTMxIn0.-5U9P-WWmhlOenzCvc6b7_71Tz17LyNxe_DOMwwqH4RqrNsilVukEcZWFRGupLHRZjIvPya2QJGpiju9ujzQuw

使用 JWT,您可以看到相应的 Payload 变化

Custom Payload simpleJWT Django
{
"token_type": "access",
"exp": 1590914198,
"jti": "ad6f76af1f8e4ebe8b6cf9b480d3f662",
"user_id": 11,
"iat": 1590917498,
"user": "tiago",
"date": "2020-05-31"
}

关于python - 向 DRF 简单 JWT 负载添加声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62113587/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com