simpleJWT使用详解
前端使用,不同于JWT
headers: { 'Authorization': 'Bearer ' + this.token },
关键字不是JWT中的JWT,而是Bearer
simpleJWT使用自定义序列化器(不同于官方文档的用法):
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data['refresh'] = str(refresh)
data['access'] = str(refresh.access_token)
# Add extra responses here
data['username'] = self.user.username
data['user_id'] = self.user.id
return data
simpleJWT重写验证后端实现多账户登录:
from django.contrib.auth.backends import ModelBackend
from users.models import User
def get_user_by_account(account):
try:
user = User.objects.get(username=account)
except User.DoesNotExist:
try:
user = User.objects.get(nickname=account)
except User.DoesNotExist:
return None
return user
class UsernameNicknameAuthBackend(ModelBackend):
'''修改django认证类实现多账号登录'''
def authenticate(self, request, username=None, password=None, **kwargs):
user = get_user_by_account(username)
if user and user.check_password(password):
return user
同时要在设置文件中settings.py设置自定义后端验证的路径:
我的是写在子应用的utils.py文件中的
# 修改django用户认证后端类实现多帐号登录 AUTHENTICATION_BACKENDS = ['users.utils.UsernameNicknameAuthBackend']
simpleJWT文档链接:https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

浙公网安备 33010602011771号