解決微信授權登陸重復回調的問題

有個問題要記錄一下,就是微信授權登錄之后重復回調的問題。

微信授權的流程是這樣:

1.用戶在微信里打開鏈接A,微信就會攜帶code和state訪問A中的重定向鏈接B。

(用戶的微信客戶端-->微信)

鏈接A如下:

https://open.weixin.qq.com/connect/oauth2/authorize?
appid=APPID
&redirect_uri=REDIRECT_URI
&response_type=code
&scope=snsapi_userinfo? ? ? ? ? ?
&state=STATE#wechat_redirect*

REDIRECT_URI就是鏈接B

2.微信重定向訪問到你的回調網(wǎng)址

(微信-->網(wǎng)站)

REDIRECT_URI?code=CODE&state=STATE

CODE和STATE都是微信服務器生成的參數(shù)。用戶點擊同意授權、繼續(xù)訪問,微信服務器就會訪問你這個URI(鏈接B)了。

3. 網(wǎng)站收到請求,就拿到CODE了,于是用CODE去拿ACCESS_TOKEN
(網(wǎng)站服務器-->微信)

https://api.weixin.qq.com/sns/oauth2/access_token?
appid=APPID
&secret=SECRET
&code=CODE
&grant_type=authorization_code

接收到一個access_token和openid

4. 網(wǎng)站拿到access_token和openid就可以向微信請求用戶數(shù)據(jù)了
(網(wǎng)站-->微信)

https://api.weixin.qq.com/sns/userinfo?
access_token=ACCESS_TOKEN
&openid=OPENID
lang=zh_CN

接收一個含有用戶信息的json。


問題:

問題就在第一步,不知道為啥第二步,點擊“繼續(xù)訪問”繼續(xù)訪問之后,微信重復地訪問鏈接B。

我一開始不知道它會重復訪問,設計的是,鏈接B收到請求之后就去拿著code請求access_token和openid,然后拿著access_token和openid去請求userinfo,拿到userinfo之后渲染頁面。

Code在五分鐘內只能被使用一次。

所以一旦重復使用code,后面幾次都是獲取不到東西的。

找到這個bug花了我很久……

解決方案:

每收到一個code,就看看是否已經(jīng)用過。

如果沒有用過,就把它跟userinfo組成鍵值對,也就是code:userinfo,再把這個對存進一個變量里。

如果用過,直接從鍵值對中取出userinfo,不再訪問微信獲取access_token。


完美~

官方文檔:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容