本文开头先吐槽一下微信开发者的文档,千年不更新。写作时间:2020年3月14日,请先打好时间,别偷偷改了别人吐槽我。文档里写的rejection和permission都会触发回调,然后我测试rejection的时候不会触发回调。微信授权逻辑进入页面,获取授权状态。(getUserid)一般检查cookie中是否有用户信息。有用户信息,pass。没有用户信息。这只是一个标记,并不是一进入页面就强制授权。而是在用户操作的时候提示用户授权,因为体验更好。在体验上,可以告诉用户浏览我们不需要您的信息,您需要注册登录才能在我们的平台上进行交互。用户拒绝授权。此页面不敏感,因此不进行任何处理。但是页面可以知道用户是否是第一次交互。这时候可以弹出一个框提示用户需要允许授权。用户允许授权,这将触发页面刷新。这里建议页面给自己加上一个标记,就是用户触发授权的事件,刷新后再调用。需求一:授权被拒绝时,弹窗嘿嘿,猜猜我在做什么。看到之前的代码有拒绝回调逻辑,在文档中也确认了。但是我在测试的时候发现拒绝不会触发回调,成功的时候逻辑是正确的。那么在这种场景下,我们如何展示呢?我们做一个小页面,隐藏在授权弹框后面,因为拒绝时页面没有变化,用户可以看到后面的小页面。基于方案一,我们发现在网速慢的情况下,同意授权的用户也会看到弹窗,这对我们需要体验的前端er是不利的。这里我们可以尝试显示一个小页面,稍微大一点的setTimeout。基于方案二,由于微信授权弹窗不会阻塞主进程,我们无法稳定控制小页面的显示和隐藏。在极端情况下,用户体验仍然不好。那我们该怎么办呢?打产品,砍需求,哈哈,当然不做这个弹框了,把这部分的功能换成另一种交互方式。需求二:非微信绑定域名做微信授权因为现在微信管的太严了,怕被微信屏蔽,所以考虑用其他域名分享外链。但是我们也希望能够在微信上进行授权登录,所以这个需求就来了。微信绑定的安全域名和回调域名是a.com,我们在微信上分享打开的域名是b.com。方案一:跨域方案首先,我们需要明确几个关键点。我们服务器判断登录就是判断cookie。对于前端来说,a.com和b.com是跨域的。a.com无法将cookie写入b.com。同样,b.com也无法读取a.com的cookie。好的,基于以上几点。我们开始实现功能。a.com/wxauth会触发微信授权,我们默认用户同意授权微信将页面重定向到回调页面。(这个是在公众号里配置的)回调页面写cookies。这时候我们就可以获取到用户登录信息了。但是基于以上,我们的跨域cookie是不能共享的。然后我们就可以打开CORS来使用了。a.com的接口允许b.com的页面进行请求。但是在跨域的情况下,默认是不携带cookies的。这时候我们可以配置withCredentials来达到携带cookies的目的。基于上面的跨域方案,我们b.com下没有cookie,只有pages。我们所有的请求和cookie都放在a.com上。方案二:分享,我觉得可以叫授权验证。最后的解决方案是所有的请求都去a.com。这个方案是所有的请求都去当前域名。在网上看到其他几个人的不错,都有这种解决方法。这种方案其实可以把a.com理解为第三方平台。微信公众号:前端立农
