Chu*_*lar 3 python django django-rest-framework
我正在使用rest-framework-jwt,只是想知道一些事情。
首先,我使用电子邮件和密码登录,并获得令牌。它运作良好。
但我也想在我的寄存器中创建一个令牌。所以,我使用这个功能:
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 创建令牌
第三......我的注册和登录的令牌是否相同?要提出请求,它应该是相同的。
谢谢!
我找到了答案。
我阅读了这个文档并意识到我只需要重新定义这些函数。就我而言,我更喜欢覆盖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
就是这样
| 归档时间: | 
 | 
| 查看次数: | 2383 次 | 
| 最近记录: |