关于Django obtain_jwt_token (authenticate自动验证)获取token返回bad request 400的原因
首先JWT obtain_jwt_token 签发token需要引用django的authenticate()方法,所以问题一般是出在authenticate()
1.普遍都是数据库内的用户名和密码与登陆的用户密码不一致。
1.1一种是创建用户时用create()创建或直接手动录入数据,这种方法会导致出入数据库的密码是明文的,authenticate()验证不了明文密码(因为authenticate()验证的是加密过的密码),存入时使用User.objects.create_user()或者使用check_password()对密码加密。具体怎么做其他博文有写,可以看看。
1.2另一种是比较傻的错误(就是我,搞得我炸裂),由于设置model里面的User表的password字段max_length=50!!!。正常思维一般的密码也不会那么长对吧,想着50长度怎么都够用了(个人项目)。但是由于上面authenticate()需要验证加密的password,所以就不好说了。存入的password经过加密,包括使用python manage.py createsuperuser创建的超级用户的密码也是经过加密的。所以你会发现超级用户也登陆不了。加密过的密码在存入时django会发出一个警告**"Data truncated for column ‘password’ at row 1**,这就说明password只存入了一部分并没有全部存入数据库。所以就导致登陆的密码与数据库取出来解密后的密码不一致的问题,导致登陆失败。只要设置max_length=255,就OK了(男的女的折磨,菜是原罪。。。)
2.就是django2.1 版本后authenticate()还会验证is_active

本文主要探讨Django中obtain_jwt_token获取token返回bad request 400的原因。一是数据库用户名和密码与登录信息不一致,可能是密码明文存储或字段长度不足;二是Django 2.1版本后authenticate会验证is_active,可通过配置取消关联或重写字段解决。
最低0.47元/天 解锁文章
5762

被折叠的 条评论
为什么被折叠?



