1.在settings中配置session认证
# 全局认证 优秀级高于视图类中的配置
'DEFAULT_AUTHENTICATION_CLASSES': [
# 默认首先使用session认证
'rest_framework.authentication.SessionAuthentication',
# cookie与session cookie是存储在浏览器上的非敏感数据
# session是存储在服务器上的敏感数据 但是session离不开cookie 因为session的sessionid存储在浏览器中
# 发送请求时 需要在Cookie中携带sessionid csrftoken 在header 在header中携带X-CSRFToken 值可以在浏览器登录用户之后找到cookie复制
# 默认首先使用basic认证 用户名密码
# 发起请求时 可以将用户名密码 进行编码 写入AUTHORIZATION中 然后发起请求
# 处理请求 将请求中携带的 类似于Basic cm9vdDoxMjM0NTY 进行解码处理得到对应的用户 获取用户成功,认证成功 获取失败,认证失败
'rest_framework.authentication.BasicAuthentication'
],
每次用户登录之后,在数据库中的session表中就会生成一张session表,保存用户的session信息.
2.在浏览器中查看生成的session认证的相关信息
在浏览器中按F12,按照图中的点击顺序,登录
之后就可以看到csrftoken
和sessionid
,他们都会随着请求头传递到Django中进行验证,验证完之后,他们就会进行授权验证,如果该用户没有达到权限,则请求也不会成功.
3.在Apifox或者postman中使用session认证
首先将csrftoken
和sessionid
保存到cookie中
然后将在header中写一个X-CSRFtoken
,他的值就是csrftoken
的值.
此时不用登入,就可以直接发送post请求,因为Django会将csrftoken
和sessionid
一起解码成username
和password
.
上面整个过程就是session认证的流程.