18年中旬做過(guò)一個(gè)小程序,當(dāng)時(shí)是通過(guò)轉(zhuǎn)跳到一個(gè)登錄頁(yè),然后點(diǎn)擊調(diào)用 wx.getUserInfo ,然后發(fā)現(xiàn)這個(gè)api被禁用了(雖然依然可以用),然后用
<!-- 需要使用 button 來(lái)授權(quán)登錄 --> <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授權(quán)登錄</button> <view wx:else>請(qǐng)升級(jí)微信版本</view> 復(fù)制代碼
因?yàn)楫?dāng)時(shí)剛好需要用戶信息,然后這個(gè)api有一個(gè) encryptedData 屬性可以獲取信息。
這樣的流程本就可以了,但是意外出現(xiàn)了。
當(dāng)?shù)诙?2020年)需要開發(fā)一個(gè)新的小程序,于是也用了老代碼, 但是出現(xiàn)了個(gè)奇怪的問(wèn)題。 有興趣的可以看下面的[奇怪的問(wèn)題]
因?yàn)槲⑿畔拗茻o(wú)法轉(zhuǎn)跳到登錄頁(yè),所以想是否應(yīng)該在首頁(yè)設(shè)置一個(gè)彈窗,點(diǎn)擊的時(shí)候授權(quán)。
但是因?yàn)榭紤]到可能會(huì)被微信拒絕,故在小程序開發(fā)者論壇開了一篇文章
app無(wú)法轉(zhuǎn)跳到登錄頁(yè)面 and 小程序登錄的哲學(xué)思考
隨后發(fā)現(xiàn),登錄其實(shí)并不需要授權(quán)彈窗or頁(yè)面。(如果服務(wù)器不需要保存用戶信息)
下面這個(gè)圖是小程序官方圖 點(diǎn)我轉(zhuǎn)跳
app.js(小程序的入口文件)的完整代碼
const loginDataKey = 'loginData' //app.js App({ onLaunch: function () { const loginData = wx.getStorageSync(loginDataKey) console.log('--loginData--') console.log(loginData) let toLogin = () => { console.log('未登錄,去登錄..') wx.showLoading({title: '登錄中', icon: 'loading', mask: true}) wx.login({ success(res){ console.log('wx.login res') console.log(res) let success = () => { console.log('登錄成功') let loginResponse = {"openid":"ooZAbwpdDdaZV_xiamianshi_mashaike"} wx.setStorageSync(loginDataKey, loginResponse) wx.hideLoading() } let fail = () => { wx.hideLoading() wx.showToast({ title: '登錄失敗,請(qǐng)重新打開小程序試試', icon: 'none', duration: 1e8 }) } // TODO 發(fā)起網(wǎng)絡(luò)請(qǐng)求 // 延時(shí)模擬請(qǐng)求登錄成功 setTimeout(success, 500) }, fail(err){ console.log(err) wx.hideLoading() wx.showToast({ title: '登錄失敗,請(qǐng)重新打開小程序試試', icon: 'none', duration: 1e8 }) } }) } // 未登錄,去登錄 if(!loginData){ toLogin() // 已登錄,但是微信session_key過(guò)期 }else{ wx.checkSession({ success () { //session_key 未過(guò)期,并且在本生命周期一直有效 console.log('session_key 未過(guò)期') }, fail () { // session_key 已經(jīng)失效,需要重新執(zhí)行登錄流程 console.log('session_key 已經(jīng)失效,需要重新執(zhí)行登錄流程, 重新登錄中') toLogin() } }) } }, globalData: { userInfo: null } }) 復(fù)制代碼
這是我通過(guò) auth.code2Session 拿到openid的截圖(因?yàn)檫@個(gè)是測(cè)試號(hào),所以沒(méi)有unionid)
【unionid】是拿來(lái)和其他平臺(tái)打通賬號(hào)的關(guān)鍵,如果只有一個(gè)小程序,都可以不需要這個(gè)。