小程序: 问题:图片验证码问题。 描述:图片验证码登录,后端判断验证不成功。 很多开发这都是用小程序的授权登录,而我这项目中需要用账号密码登录,同时使用图片验证码去校验,后端是PHP返回的图片流,直接插入到wxml中的image.src里面直接显示,图片能清楚显示,无怎么提交后端都返回验证码错误,狗血的是我用postman测试一直能成功登录,放到小程序怎么样都不行。 和后端交流问题,他就截图postman,表示后台系统程序没有问题,直接把锅丢给前端。 小程序端,请求正常,请求数据格式正常,验证码输入正确,后台能返回校验情况,我也真找不到问题。我这边只好测试请求数据的格式,json,form什么的格式都测试了一遍,都不行。图片放到最大,确保验证输入一定正确,无奈,页面上的操作无法解决请求的问题。 再和后端沟通,后端确实有点不耐烦,我叫他返回base64图片试试看,他却说postman请求成功,还用PC端后台登录也是这样用都可以,就不给我返回base64了。 我只好自己瞎搞一下了,拿着请求格式,图片验证码不能成功的问题,去百度,谷歌,360,知乎,博客,前端的群,一起开发的朋友同事,问了一边,翻了一遍,然而都没有对应的问题解决情况,又回头看了小程序请求文档,最终懂没有在这个方向解决这个问题。 为了不影响开发进度,这些纠结解决不了的问题也只好放在一边了。 利用晚上,周末的时间再去找问题解决方法。 解决问题要点:转换问题的思路,了解实现的根本原理。 PC端提交验证图片验证码无误,这个验证码的校验过程是怎么样的?作为前端,很多人都用图片验证码,但估计都不知道这个直接插入html中的验证码,到底是怎么样跟后台校验的。原来这个验证码获取的时候,浏览器会主动保持[‘Set-Cookie’]里面的值PHPSESSID,这个值就是后端加密的图片验证码数字的字符串,在cookie本地,然后提交数据验证的时候后端再取cookie的PHPSESSID解密,校验提交的验证码。是这样的流程。然后上小程序论坛,发现小程序根本不会主动储存[‘Set-Cookie’],所以后端一直都应该拿不到PHPSESSID,然后的校验肯定是不能成功的。 然后我要手动存储[‘Set-Cookie’],url就是图片路径,我前端怎么能手动存储[‘Set-Cookie’]?下载图片,去请求中的取header[‘Set-Cookie’],然后保存起来,提交登录验证把保存的header带上,然后验证成功,问题解决了。 花了好几天的时间 总结: 1.错误思路,方向错误,怎么改都是错。 2.后端不配合,postman请求成功,就不帮忙调试问题了,帮忙调试一下,就知道没有PHPSESSID,那就可以直接知道问题的根处,解决问题的时间可以缩短90%; 3.转换思路,了解原理,配合调试。 4.一般情况,叫后端都可以打印日志看看就好,像我这样搞,都是逼的。