在說登錄之前,可以先檢測是否是登錄狀態(tài)
wx.checkSession()?:檢查登錄態(tài)是否過期
wx.checkSession({
? ? success() { // session_key 未過期,并且在本生命周期一直有效 },
? ? fail() { // session_key 已經(jīng)失效,需要重新執(zhí)行登錄流程 wx.login() // 重新登錄 }
})?
登錄
登錄就是要讓開發(fā)者服務(wù)器知道當前的用戶是誰,通常我們開發(fā)登錄功能,都是要讓用戶輸入賬號和密碼才能實現(xiàn)登錄操作。在微信小程序中,我們可以通過微信服務(wù)器來完成這個操作,獲取到與當前用戶對應(yīng)的唯一標識(openId)。
注意:每個用戶相對應(yīng)于每個微信應(yīng)用的openId是唯一的,也就是說一個用戶相對于不同的微信應(yīng)用會存在不同的openId

從上圖中,我們可以看出,小程序要想實現(xiàn)登錄的幾步:
一、調(diào)用wx.login()
小程序前端使用wx.login()從微信服務(wù)器獲取code

二、從微信服務(wù)器獲取openid
將獲取到的code發(fā)送給開發(fā)者自家的服務(wù)器,服務(wù)器利用appId、appSecret和code向微信服務(wù)器換取用戶openId和session_key
三、開發(fā)者服務(wù)器自定義登錄態(tài)并將其與openId 和session_key 關(guān)聯(lián)起來然后寫session
四、開發(fā)者服務(wù)器將登錄態(tài)返回給小程序前端,小程序前端使用wx.setStorageSync() 將登錄態(tài)保存起來
五 、小程序端 wx.getUserInfo 獲取用戶信息 + wx.getStorage 獲取 3rd_session 數(shù)據(jù)后,發(fā)送給開發(fā)者服務(wù)器,以便開發(fā)者服務(wù)器知道當前操作的用戶是哪位。
也就是說,在整個過程中小程序前端是拿不到用戶openId 的,它只能通過開發(fā)者服務(wù)器發(fā)給它的登錄態(tài)來告訴服務(wù)器當前用戶的信息。
授權(quán):小程序的API接口中有些接口是需要用戶授權(quán)才可以調(diào)用的,以調(diào)用獲取用戶信息
授權(quán)有這樣幾種方式:
1.wx.authorize()

但是調(diào)用這個api,來授權(quán)用戶信息,是不會出現(xiàn)授權(quán)彈窗的。
想要出現(xiàn)授權(quán)彈窗,還需用第二種方式
2.<button open-type="getUserInfo"/>

用戶通過點擊<button open-type="getUserInfo" bindgetuserinfo="onGotUserInfo"/>彈出授權(quán)彈窗,如果同意授權(quán)則可以從bindgetuserinfo回調(diào)中獲取到用戶信息。

這里wx.setStorageSync()是緩存輸入登錄名稱,以便測試傳遞值。
然后判斷授權(quán)輸出的信息,errMsg;授權(quán)成功則通過wx.login()獲取code;將code通過wx.request()發(fā)送給自家服務(wù)器,服務(wù)器返回信息成功則登錄成功。

拓展:檢查是否授權(quán)wx.getSetting()

這里需要小程序端進行判斷,如果已經(jīng)授權(quán)過就可以直接調(diào)用相應(yīng)的接口,如果沒有授權(quán),需要提示去授權(quán)或者直接跳轉(zhuǎn)到授權(quán)頁,當然這要根據(jù)你的項目需求來。