web项目 day02(八)

认证中间件

中间件不属于任何一个业务,可以将其放入common文件夹中
在common文件夹中新建一个middleware .py文件
然后在settings .py中增加这个中间件的配置
在这里插入图片描述

认证中间件,继承的是MiddlewareMixin,如果返回response,这时候请求就中断了,只有报错的时候才返回response,如果不报错,就什么都不返回(默认就算None),Django就会默认往下执行
在这里插入图片描述

自定义认证中间件
  • 白名单(不需要认证的url)
  • request.path 访问路径,如果访问路径在白名单中,就不需要认证
  • 根据 request.session[‘uid’] 来判断登录状态

这是一个认证登陆的中间件

1. 通过session认证

middleware .py
在这里插入图片描述
进行测试
在这里插入图片描述
在这里插入图片描述
由于这两个url都是在白名单中,排除在外,所以中间件继续向下执行
将发送验证码的url移除白名单,进行测试(测试前要删除cookie),可以发现返回错误码,因为现在发送验证码邀请被中间件认证,没有uid(没有登陆状态),按照代码流程,返回了错误码2004
在这里插入图片描述

2. 通过token认证

pc端浏览器是根据cookie和session机制为依据,对用户进行身份认证的标识,与服务器建立数据传输的连接,pc端浏览器的session保存在cookie中
而app端没有这个机制,手机端是通过token为依据与服务器建立数据传输的连接,
当客户端拿到了从服务器传来的token后,客户端会将token保存在app中对应的数据库中,当客户端需要创建请求进行数据传输的时候,通过http请求头带上这个token与服务器进行数据传输(请求头的名字可由程序员自己定义),http请求头中设置的 token,是以字典key-value的形式

  1. 如何通过token认证呢?
    其实很简单,只需把认证中间件中的session变成token就行了,
    在这里插入图片描述
    在models .py文件中,定义一个方法,为用户生成唯一的 token(可用uuid生成),同时设置缓存的过期时间(所有的认证都必须由过期这个时效性,否则这个安全性是有问题的)
    在这里插入图片描述
    然后在apis .py文件中的登陆接口,将session认证方式换为token认证方式
    在这里插入图片描述
  2. 可以查看一下token的内容
    查看token比较麻烦
    在Ubuntu终端使用命令 python manage,py shell
    导入request模块,发送一个get请求获取token
    在这里插入图片描述
    request.META中内容很多,可以在中间件文件中打印一下
    在这里插入图片描述
    查看打印的内容,LOGNAME是key,ikingqu是value
    在这里插入图片描述
    刚刚没有登陆,所以服务器是创建了一个token,然后发送给客户端当客户端需要想服务器发送请求的时候,需要带上token,假设这里的token是qwertyuio56789
    在这里插入图片描述
    查看打印的内容,这个就算请求头中带的token
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值