后端各种插件用法

DRF-simplejwt用法

  • 需要准备的数据
### settings
......
SECRET_KEY = 'django-insecure-io=8w46&gi9#b_&3d=22t9)+l_fa(kg^aoouov!!g=^hb972g9'
# jwt token配置
JWT = {
    # token失效时间,单位分钟
    'EXPIRE_MINUTES': 60 * 4
}
- 自定义的SECRET_KEY = settings.SECRET_KEY (推荐使用django项目生成的key)
- 自定义的playload负载
	# 定义JWT的payload(负载)
    payload = {
        'id': user.id,
        'username': user.username,
        'exp': datetime.datetime.now() + datetime.timedelta(minutes=EXPIRE_MINUTES)  # 设置过期时间
    }
	
  • 生成token
import jwt
import datetime
from django.conf import settings

def generate_token(user: UserInfo) -> str:
    payload = {
        'id': user.id,
        'username': user.username,
        'exp': datetime.datetime.now() + datetime.timedelta(minutes=EXPIRE_MINUTES)  # 设置过期时间
    }
    # 指明算法HS256
    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
    return token

  • 校验token是否可用
def is_token_valid(token: str) -> bool:
    try:
    	# 这句若执行不成功,即抛出异常
        jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        return True
    except jwt.InvalidTokenError:
        return False
  • 校验token是否过期
def is_token_expired(token: str) -> bool:
    try:
    	# 没有过期
        decoded_token = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        return False
    except jwt.ExpiredSignatureError:
        return True

  • 解析token,返回用户对象
def parse_token(token: str) -> UserInfo:
    try:
    	# 解析正确,则返回token对象
        decoded_token = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        return UserInfo(decoded_token["id"], decoded_token["username"])
    except jwt.ExpiredSignatureError:
        print("Token is expired.")
    except jwt.InvalidTokenError:
        print("Token is invalid.")
	# 解析错误,返回一个空User对象
    return UserInfo(id=None, username=None)
  • 更新token
def update_token_expiration(token: str) -> str:
	
	# 获取token
    decoded_token = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
    # 更新过期时间
    decoded_token["exp"] = datetime.datetime.now() + datetime.timedelta(minutes=EXPIRE_MINUTES)  # 设置过期时间
    # 重新生成token
    updated_token = jwt.encode(decoded_token, SECRET_KEY, algorithm="HS256")
    return updated_token

posted @ 2024-10-14 16:59  清安宁  阅读(4)  评论(0编辑  收藏  举报