微信H5中靜默登錄及非靜默登錄的正確使用姿勢


在微信中打開網頁且需要調用微信登錄接口時,微信官方給我們提供了兩種登錄調用方式:靜默登錄和非靜默登錄;但是官方文檔中卻沒有說明在何種情況下使用靜默登錄,何種情況下使用非靜默登錄,所以在這里,我想將之前做項目關於這個問題的心得分享給大家。

一、閱讀官方文檔,實現兩種登錄方式

其實通過閱讀微信官方文檔,很容易就能分別實現兩種登錄方式,這里我貼一下微信官方文檔關於《微信網頁授權》的鏈接以及我的實現代碼(如果你已經實現了這兩步,就可以直接跳過這一部分啦):

a. 微信網頁授權官方文檔鏈接

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

b. 我的實現代碼:

1、調用靜默登錄:


 

 

 

 

 

2、調用非靜默登錄:


可以看出,除了scope參數(其實這里可以通過加函數參數的方式將兩個方法合二為一)

3、獲取code之后,調用微信的接口獲取用戶信息(因為為了將appsecret保存在服務端,所以我們將這一步分為兩步:前端拿到code之后調用服務端login接口,服務端login接口根據code調用微信獲取用戶信息接口)

前端拿到code之后調用服務端login接口:


(因為我使用了react框架和react-router路由管理所以這里將調用服務端login接口寫在我的最外層組建的componentDidMount方法中,並通過判斷query中是否含有code的方式決定是否調用login方法)

服務端login接口根據code調用微信獲取用戶信息接口:


(這一步步驟略多,因為我的后端使用的是nodejs,但是因為網絡請求都是異步的,即使使用了Promise,代碼看起來還是很捉急【回調傷不起。。。】,具體方式那家可以參閱上方的鏈接:微信官方文檔)

 

二、靜默登錄及非靜默登錄的正確使用姿勢

回到這張文章的標題:微信H5中靜默登錄及非靜默登錄的正確使用姿勢

 

先上代碼:


這個代碼就是前文中“前端拿到code之后調用服務端login接口”的改裝,具體改裝方式就一點:在調用服務端login接口后如果拿不到用戶信息,則調用微信的非靜默登錄。

 

所以這里我們實現的登錄邏輯其實是:

1.先調用靜默登錄

2.拿到code之后調用后端login接口獲取用戶信息

3.根據2的結果:

  如果拉取用戶信息成功:

    執行客戶端登錄邏輯(這一步執行完整個登陸過程就結束了)

  如果拉取用戶信息失敗:

    執行非靜默登錄(這一步執行完就會跳到步驟2)

 

再說原因:

    當一個微信用戶進入到我們的網頁時,我們沒法預先判定 ta 是否已經微信授權過我們的網頁,當我們第一次調用微信登錄接口時,我們就必須在靜默登錄與非靜默登錄中做出選擇,先來看調用兩者分別會產生什么樣的效果:

a.靜默登錄:用戶無感知;如果用戶曾經授權過該網頁,則后續拉去用戶信息會成功;如果用戶曾經沒有授權過該網頁,則后續無法拉取到用戶信息

b.非靜默登錄:頁面會跳轉到授權頁面,請求用戶授權;如果用戶曾經授權過該網頁,則會顯示您近期已經授權過該應用;如果用戶曾經沒有授權過該網頁,則會請求用戶授權該網頁;

上文中斜體及下划線的地方即使兩種方式分別不好的地方;會產生這些缺點的根本原因就是:在一個用戶進入我們的網頁時,我們沒辦法判斷其以前是否使用微信登錄過我們的網頁,所以我們無法做出正確的選擇

但是我們終究要做出選擇,相比兩者的缺點,首先使用靜默登錄的缺點更能讓我們接受,因為使用靜默登錄失敗后用戶是無感知的,即使是沒有拉到用戶信息,我們也可以根據返回信息判斷從而進一步調用費靜默登錄;相反,如果首先使用非靜默登錄,則當用戶已經授權過應用時,頁面的來回跳轉顯然不是一個很好的用戶體驗,而且這也違背了微信官方提供非靜默登錄方式的初衷:近期已授權過的用戶無感知登錄

 

三、總結

以上就是我對於“微信H5中靜默登錄及非靜默登錄的正確使用姿勢”的看法啦,大家有什么心得和看法,也可以留言與我交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM