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/