[ django自定义jwt,实现创建和验证两个接口 ]


创建jwt令牌

import jwt
import datetime
from django.conf import settings

def create_tokens(user_id):
    account_token_payload = {
        'user_id': user_id,
        'exp': datetime.datetime.now() + datetime.timedelta(days=365)  # 账户令牌过期时间
    }
    refresh_token_payload = {
        'user_id': user_id,
        'exp': datetime.datetime.now() + datetime.timedelta(days=365),  # 刷新令牌过期时间
        'type': 'refresh'  # 指定类型为刷新令牌
    }

    account_token = jwt.encode(account_token_payload, settings.SECRET_KEY, algorithm='HS256')
    refresh_token = jwt.encode(refresh_token_payload, settings.SECRET_KEY, algorithm='HS256')

    return account_token, refresh_token

验证jwt令牌

from common.exception import SvcUnError
from django.conf import settings
import jwt

def check_account_token(account_token: str):
    try:
        return jwt.decode(account_token, settings.SECRET_KEY, algorithms=['HS256'])
    except jwt.ExpiredSignatureError:
        raise SvcUnError(msg='Account token has expired',code=401)
    except jwt.InvalidTokenError:
        raise SvcUnError(msg='Invalid account token', code=401)