gpt4 book ai didi

python - 使用 Rest-Framework-Jwt 创建 token

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:47 25 4
gpt4 key购买 nike

我正在使用 rest-framework-jwt,只是想了解一些事情。

首先,我使用电子邮件和密码进行登录,并获得 token 。它运行良好。

但我也想在我的寄存器中创建一个 token 。所以,我使用这个函数:

def create_token(user):
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)

return token

问题是我没有用户名。所以,它不起作用。 :)我想,如果它适用于登录,它应该适用于注册。但不是。 :笑脸:

即使我在我的模型中写了这个 USERNAME_FIELD = 'email'。它总是在我的 create_token 函数中询问用户名。

但其次,我想创建仅包含电子邮件、密码和 uuid 的 token

第三...我的注册和登录中的 token 相同吗?要发出请求,它应该是相同的。

谢谢!

最佳答案

我找到了答案。

我读了这个doc并意识到我只需要重新定义这些功能。就我而言,我更喜欢覆盖 jwt_playload_handler

因此,我将该函数添加到一个名为 utils.py 的文件中,它看起来是这样的:

from calendar import timegm
from datetime import datetime

from rest_framework_jwt.compat import get_username_field
from rest_framework_jwt.settings import api_settings


def jwt_payload_handler(user):
username_field = get_username_field()
print(user['uuid'])
payload = {'user_id': user['uuid'], 'email': user['email'], 'username': user['email'],
'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA, username_field: user['email']}

# Include original issued at time for a brand new token,
# to allow token refresh
if api_settings.JWT_ALLOW_REFRESH:
payload['orig_iat'] = timegm(
datetime.utcnow().utctimetuple()
)

if api_settings.JWT_AUDIENCE is not None:
payload['aud'] = api_settings.JWT_AUDIENCE

if api_settings.JWT_ISSUER is not None:
payload['iss'] = api_settings.JWT_ISSUER

return payload

然后,在 settings.py 中

JWT_AUTH = {
'JWT_PAYLOAD_HANDLER':
'users.utils.jwt_payload_handler',
}

说起来,它应该承担我的职能。

在我看来:

def create_token(user):
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)

return token

就是这样

关于python - 使用 Rest-Framework-Jwt 创建 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623751/

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