13.登录:
在users下的urls下添加登录签发JWT的视图
1)导包:from rest_framework_jwt.views import obtain_jwt_token
2)添加路由:url(r'^authorizations/$', obtain_jwt_token)
3)在users/utils.py中创建jwt_response_payload_handler函数修改视图到的返回值.
4)在配置中的JWT_AUTH中添加配置:
"JWT_RESPONSE_PAYLOAD_HANDLER":"users.utils.jwt_response_payload_handler"
5)在users/utils.py下自定义一个类(UsernameMobileAuthBackend)继承自ModelBackend,重写django认证系统ModelBackend里面的authenticate(self,request,username=None,password=None,**kwargs)方法自定义用户名或者手机号认证(因为username可能是用户名,也可能是手机号)
6)抽出一个根据账号来获取用户对象的方法(get_user_by_account(account))放在自定义类的外面
1>正则账号信息判断是否为手机号,根据手机号查询数据库获得用户对象
2>否则根据用户名查询数据库获得用户对象
3>捕获异常,因为是get查询数据库,不存在返回None,否则返回用户对象
7)在重写的authenticate方法中调用获取用户对象的方法,传参为接收到的username,接收获取到的用户对象
8)验证用户对象的密码,认证成功后返回用户对象:
if user is not None and user.check_password(password):
return user
9)配置文件中添加认证方法的配置:
AUTHENTICATION_BACKENDS=['users.utlis.UsernameMobileAuthBackend']
10)修改前端代码