1. 程式人生 > >微信授權存在的跨域問題以及解決方法

微信授權存在的跨域問題以及解決方法

【問題描述】

在前後端徹底分離的情況下,當我們的前端通過Ajax訪問某個後臺提供的介面地址的時候,瀏覽器會提示錯誤(通過檢視控制檯檢視),並且不能看到微信授權後的結果。總而言之就是出現了跨域問題。

【第一種解決方法】

後臺程式碼不要企圖一次性完成所有的授權服務並且直接返回一個包含授權成功後獲得的使用者資訊的Json資料,因為這樣做雖然後臺容易實現了但是前端卻會遇到跨域的問題。

解決方法就是分步完成,首先我們訪問前臺,前臺通過ajax技術訪問後臺,後臺訪問微信端資料,特別注意這個時候我們填寫的回撥地址是前端的地址也就是一個html地址,然後前臺拿到了資料之後再次ajax提交給後臺,後臺再次處理,與微信端打交道,然後再次……

總而言之就是把授權這份工作分步驟完成並且這個分步驟是前後端還有微信端都需要參與的。

這種方法需要注意的是前後端事先要約定好回撥地址究竟是後臺的哪個地址,不可改變。如果改變的話後臺的程式碼或者配置檔案也需要改變。

【第二種解決方法】

這種方法同樣需要一份協議:前後端需要約定好授權成功後返回的前端地址。也就是說,使用者直接訪問的是後臺授權的地址,後臺授權過程中與微信端進行互動的過程前臺不參與,授權成功後,後臺將會跳轉到某一個前端的地址,這個地址必須是事先約定好的,前端在這個地址上書寫解析資料型別的程式碼即可。如果前端的這個地址改變的話,後臺同樣需要修改java程式碼或者是配置檔案。(注:授權成功後前後端互動有幾種方式,可以考慮後臺用寫url的方式傳遞資料給前端,也可以考慮寫入session域,然後由前臺被訪問時ajax從後臺中拿到session域中的資料)

總而言之就是授權過程中前端渾然不知,知道使用者訪問前臺的時候前臺才會呼叫相應的js函式進行資料的獲取或者解析。

我個人比較喜歡第二種方式,但是第一種方式也很不錯。如果有遇到什麼問題歡迎交流。