在使用jwt令牌的时候 我用了rest_framework_simplejwt
会产生报错如下
这个报错在使用rest_framework_jwt时不会出现
但是我用的是自定义的用户表 所以直接用rest_framework_jwt很麻烦 要搞各种自定义
使用rest_framework_simplejwt 我用postman来发送请求的时候是能够生成token的 那么该怎么用rest_framework_simplejwt在函数中生成token呢??
参考下面个例:
在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})