参考下面个例:
在rest_framework_simplejwt中,生成token需要使用jwt.encode方法,传入负责创建payload的字典和密钥即可。示例如下:
from rest_framework_simplejwt.tokens import RefreshToken
# 生成token
def generate_token(user):
refresh = RefreshToken.for_user(user)
token = str(refresh.access_token)
return token
其中RefreshToken.for_user(user)方法可以自动创建并返回一个RefreshToken对象,str(refresh.access_token)则将access_token转为字符串。
同时,如果你需要自定义payload,可以通过继承rest_framework_simplejwt.tokens.AccessToken或rest_framework_simplejwt.tokens.RefreshToken来自定义,例如:
from rest_framework_simplejwt.tokens import RefreshToken
class MyToken(RefreshToken):
def __init__(self, user):
self.user_id = user.id
super().__init__(user)
@property
def payload(self):
payload = super().payload
payload['user_id'] = self.user_id
return payload
这里继承了RefreshToken类,并在__init__方法中添加了一个user_id属性,然后重写了payload属性,在其中加入了自定义的user_id字段。
然后在视图函数中就可以使用MyToken来生成token了:
def my_view(request):
user = authenticate(request)
token = str(MyToken(user).access_token)
return Response({'token': token})