| """ |
| 系统:session认证 |
| rest_framework.authentication.SessionAuthentication |
| ajax请求通过认证: |
| cookie中要携带 sessionid、csrftoken,请求头中要携带 x-csrftoken |
| |
| 第三方:jwt认证 |
| rest_framework_jwt.authentication.JSONWebTokenAuthentication |
| ajax请求通过认证: |
| 请求头中要携带 authorization,值为 jwt空格token |
| |
| 自定义:基于jwt、其它 |
| 1)自定义认证类,继承BaseAuthentication(或其子类),重写authenticate |
| 2)authenticate中完成 |
| 拿到认证标识 auth |
| 反解析出用户 user |
| 前两步操作失败 返回None => 游客 |
| 前两步操作成功 返回user,auth => 登录用户 |
| 注:如果在某个分支抛出异常,直接定义失败 => 非法用户 |
| """ |
| from rest_framework.exceptions import AuthenticationFailed |
| import jwt |
| from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication |
| from rest_framework_jwt.authentication import jwt_decode_handler |
| from rest_framework.authentication import BaseAuthentication |
| def authenticate(self, request): |
| auth = 从request中得到 |
| user = 从auth中得到 |
| if not user: |
| return None |
| return user, auth |