本文共 2749 字,大约阅读时间需要 9 分钟。
打印一下meta信息
send 下面一堆就是meta 看一下这个meta类型 是字典类型,就可以用字典调用里面的东西 可以这样把key都拿到 也可以用map,首先有大小写问题,转换成小写 发送 是空的,那么改成endswith试试 就是这个名字 通过这个key就可以拿到这个值了 不想报错可以用get,明确告诉你,找不到就返回none 这样就那到了对方的认证信息 打印一下token是否是我们需要的东西 拿到了 如何知道这个token对不对,需要验证下是否篡改过没 这样就是用这个key来解,只要解失败就说明篡改过 解码失败 如果错误抛出也不要说自己内部错误,对方可能是恶意的 现在把token塞进去 如果成功写一个东西 现在就ok了用key对token进行校验,一定可以校验成功
看一下payload是不是我们想要的东西 userid是添加的,拿到了 复制之前的token 这样就验证可以 只要发token过来,里面至少有一个userid,我们一开始值放了userid,所以不管解析多少都只有一个userid 现在payload打印出来的就是这些 假设没有伪装成别人,这就告诉你了,刚才登录过,才给JWT,还不允许修改,只能这台机器,但是现在拿到这个值其实也不敢作数,还要做一件事,拿到这个id到数据库里找找,这个用户被激活了没有,或者被删除了没,被禁用了没。 假如发的jwt这个人已经被禁用了,就不准登录了,所以这时候还需要再查一次数据库。 ** 它只是告诉你是谁,但是这个用户有可能在数据库还有其他的一些状态,所以要filter一些条件。get如果拿不到就直接抛出异常,异常捕获就返回用户名和密码错误** 在很多情况下要做用户身份的验证,比如cookie,这里变一下就可以去拿cookie值,来代表刚才是否登录过。 有些网站保存用户名和密码下次直接登录,它会生成一个token值,是放在cookie里 的,下一回请求的时候,cookie会自动发送,看看一个cookie里有没有对应的值,会解密,如果ok,就代表你是登录过的 我们现在拿到这个值,也要判断这个人有没有权限,get已经告诉查有此人,实际上还需要filter,看看这个账号是否是删除的 这个first拿到none说明出问题,用户不能登录 但是并不是show这地方需要判断 假如发博客的时候需要登录,这一部分就是公用的,可以到处都用,所以还是提取出去写一个函数 假如这个函数写好了,谁需要谁调用,等于是个装饰器,增加一个用户验证的 这就是最典型的为一个函数增强什么功能,用户是否已经登录过,进行验证 现在这样做一些微调 想做的事情是,一旦出现任何问题,就已经return了,show函数就不会return了,就相当于拦截住了 本来应该通过url映射,找这个函数 结果在半路,被你的wrapper函数,wrapper函数表示不执行,因为认证未通过,从这里就response,下面show就不执行了。 这个装饰器可以实现 拦截功能,这就是用装饰器自己实现的一种拦截的功能 其实也有类似的东西,在settings里讲过中间件,用另外的名词讲,也可以叫拦截器,这个拦截器做了两件事情,来的路上拦,第二个回去的路上拦,既拦request,又拦response request一直向下走,走过去没有装饰器就到了view函数上去 了,view函数return,再从上面回去,经过response拦截。 中间件,在用户浏览器和你的view函数之间那些东西就叫中间件 这里增强了也拦了一把,两种方式的区别,装饰器的方式很自由,另外一种中间件的方式是所有请求都要过来 这种配置所有请求都要经过它无一例外,但是发现有些请求不要经过,这是对所有请求所有response在做拦截,但是其实不需要对所有请求做拦截 所以需要更灵活的方式,装饰器,查一下这个用户在不在 用装饰器的好处就是,谁认证就给谁加装饰器,中间件是对所有的request和response都要过一遍 查看错误哪里来的,看这三句哪里出错了 1后面出了问题 走一遍 拿到数据了 但是数据不一定能拿到,,所以还需要判断一下,否则还是没有权限,必须符合条件才能进行下一步操作 拿到user之后,用户登录后点某个页面要做一次验证,如果验证不通过立即告诉对方用户名密码错误 如果验证通过,会跳转到页面里去,页面里要显示一些相关信息,这些信息怎么来,应该是刚才查询的里面带的信息最多虽然解码成功,不代表这个用户查出来允许登录,如果查到就是允许登录,if user就是查到了,如果返回一个对象,就把这个值放到request.user上,动态增加属性,最后request就给了被装饰的函数
也就是这样,如果成功,在request里动态添加属性,然后这个属性随着request注入给了 show函数 现在试试打印一下 、打印了,这个request被我们装饰器做了些修改 实现对request和response的拦截,方法有很多,装饰器正好可以做 完善了登录注册 密码用一个强密码来解决了,因为盐一直在变,对方拿到了数据库密码,也无法破解数据库里所有的,只能破解其中一个,而且使用一种比较慢的加密算法,我们用穷举的方式也要耗费很长时间 如何使用jwt 登录成功就会把用户信息返回回去,最后把token返回去,因为这个token拿了,下一回需要把token信息带上,不带token信息,可能有一些授权的页面的view函数不允许访问了。 怎么在登录后得到jwt,需要让别人提供jwt,首先可以set-cookie方式,也可以从json里去token,总之拿到token后要放在请求头的header部分 这个jwt拿到后,会改个名字,上传 名字有http—— 拿到数据解开,得到数据就进行查询,如果能查到说明这个用户当前可以登录(需要现查一遍数据库,允许了才可以登录) 将请求拿到的信息如果可以,保存到request里,传递给内层函数,show视图函数,视图函数处理后,return之前还可以进行拦截 视图函数,视图函数处理后,return之前还可以进行拦截 请求来了之后要进行userid的比较 在真正使用的时候,jwt也要加个时间,时间戳,并不是永久使用的,生成token的时候把时间给它 试一下 login登录失败 datetime没有json序列化 用这个试试,代表微秒 再次send就成功了 也就是这里可以是浮点数 浮点数不顺眼可以转成int 下面验证的时候还需要解决时间的问题,过期没过期,需要做一个时间验证 现在客户端有userid和时间了,因为防篡改可以放心大单用时间,只要解码成功就可以开始做这个事情转载地址:http://bozgn.baihongyu.com/