simpleJWT使用详解

前端使用,不同于JWT

 headers: {
     'Authorization': 'Bearer ' + this.token
 },

关键字不是JWT中的JWT,而是Bearer

 

simpleJWT使用自定义序列化器(不同于官方文档的用法):

1
2
3
4
5
6
7
8
9
10
11
12
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重写验证后端实现多账户登录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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文件中的

1
2
# 修改django用户认证后端类实现多帐号登录
AUTHENTICATION_BACKENDS = ['users.utils.UsernameNicknameAuthBackend']

  

simpleJWT文档链接:https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

posted @   EricYJChung  阅读(1433)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示