有一个问题想记录一下,就是微信授权登录后重复回调的问题。
微信授权流程如下:
1、当用户在微信中打开链接A时,微信会携带该代码,访问A中的重定向链接B。(用户的微信客户端-->微信)
链接A如下:
=
&=
&=代码
&=
&=#*
是链接B
2.微信重定向访问您的回调网址(微信-->网站)
?代码=代码&=
CODE 和 都是微信服务器生成的参数。 用户点击同意授权并继续访问,微信服务器将访问您的URI(链接B)。
3.网站收到请求时,会获取到CODE,所以使用CODE来获取。
(网站服务器-->微信)
=
&=
&代码=代码
&=
收到一个和
4. 网站获得金额后,即可向微信请求用户数据。
(网站-->微信)
=
&=
郎=
接收包含用户信息的 json。
问题:
问题就出在第一步。 不知道为什么第二步,点击“继续访问”继续访问后,微信反复访问B链接。
一开始我不知道它会被重复访问。 设计思路是,链接B收到请求后,先取代码并请求和,然后取and并请求,拿到后渲染页面。
代码只能在五分钟内使用一次。
所以一旦代码被重用,接下来的几次你将无法得到任何东西。
我花了很长时间才发现这个bug...
解决方案:
每次收到代码时,请检查它是否已被使用。
如果之前没有使用过,则与其组成一个键值对,即code:,然后将这个对存储在一个变量中。
如果已经使用过,直接从键值对中取出,不再访问微信获取。
完美~
官方文档: