前言,以前做过微信的小程序开发登录,以及扫码登录方式;简单回顾一下以前的方式吧(如果没记错的情况下):
(1)小程序:
通过前端wx.login()可以直接获取到code,然后请求后端获取openId或者进行登录等,比较简单;
(2)扫码登录
这个比较麻烦点了,其实理解了其中的oauth协议的code方式,能拿到code,也就跟小程序那个一样了.其中不同的就是前端的code是通过指定重定向地址通过传参过来的;
扫码也是一样,前端是vue写的,当时我给前端的解决方案是,当然首先在公众平台指定白名单路径;然后前端请求微信授权接口,指定的重定向地址依然是自己的一个前端页面,然后请求微信后会重定向到该页面,然后在该页面进行处理拿到code,完成;
(3)当前业务新的方式(依稀的感觉以前想到过这个方案,其实也是反借鉴了微信授权重定向)
1.前端请求 接口A ->传参自定义的url,此处的后端逻辑是: ==> 将url存储redis,生成uuid当作key,然后响应重定向地址:(微信的授权地址,然后其中的重定向地址为redirect_uri=后台接口B?uuid=uuid),将uuid放到请求参数
2.前端这时候会根据微信的重定向,带着code和自定义的uuid参数,请求到 后端接口B,后端进行获取openId操作,然后通过uuid拿出url;
首先将openId对应的用户信息(要么微信获取的,要么就是以前就有的)保存到redis供下次关联手机号使用;
然后这时候骚的来了,将openId通过cookie的方式响应存入前端;然后响应了一个html => (<script type='text/javascript'>location.href='" + 通过uuid获取的前台url+ "';</script>)
3.然后前端应该是直接执行了后端相应的跳转脚本到了指定的地址;
4.此时前端本地cookie有了openId,然后访问特定的后台接口C拿到登录凭证TOKEN进行后续操作;
看着代码啥的还挺复杂,一套又一套的跳来跳去....