微信小程序官方登錄方式修改,要求通過button點(diǎn)擊登錄,和大家分享一下解決方案。
原先的登錄邏輯是注冊一個(gè)全局login方法, login方法中首先調(diào)用wx.login靜默登錄,獲取臨時(shí)登錄憑證code,在開發(fā)者服務(wù)器后臺調(diào)用 api,使用 code 換取 openid 和 session_key 。然后調(diào)用wx.getUserInfo獲取用戶信息。
現(xiàn)在的實(shí)現(xiàn)邏輯是寫一個(gè)button中轉(zhuǎn)頁,進(jìn)入小程序wx.getUserInfo獲取失敗后跳轉(zhuǎn)到button中轉(zhuǎn)頁,點(diǎn)擊button調(diào)用bindgetuserinfo方法,該方法返回的detail數(shù)據(jù)與wx.getUserInfo方法返回的信息一致,此時(shí)也可以獲取到用戶信息?;卣{(diào)成功后wx.navigateBack({})回原頁面。
下面貼上部分代碼片段:
async bindGetUserInfo(event) { const { detail } = event; const isSuccess = detail.errMsg === 'getUserInfo:ok'; if (isSuccess) { this.authSuccess(detail); return; } // 用戶拒絕授權(quán) // wx.navigateBack({}); } async authSuccess(detail) { await this.getToken(detail); wx.navigateBack({}); // this.nextHander(); } 保存用戶信息 async getToken(detail) { console.log('getToken', detail); const session_key = wx.getStorageSync('session_key'); const { encryptedData: encrypted_data, iv } = detail; const that = this; // 保存用戶信息到服務(wù)器 const { data: { user, up_token, token, is_created } } = await this.fetch({ url: '/api/artisan/wechat/login', data: { session_key, encrypted_data, iv, }, method: 'POST', }); wx.setStorageSync('user', user); this.$root.$parent.store.set('up_token', up_token, 30); // 存儲用戶標(biāo)識符到本地 this.$root.$parent.store.set('token', token, 30); this.$root.$parent.store.set('is_created', is_created, 30); // redux // store.dispatch({ // type: 'SET_IS_CREATED', // payload: is_created, // }); }
就醬愉快的重構(gòu)結(jié)束~
KESION 科汛軟件
KESION 科汛軟件是國內(nèi)領(lǐng)先的在線教育軟件及私域社交電商軟件服務(wù)提供商,長期專注于為企業(yè)提供在線教育軟件及社交電商SaaS平臺解決方案。
公司核心產(chǎn)品云開店SaaS社交電商服務(wù)平臺、在線教育SaaS服務(wù)平臺、教育企業(yè)數(shù)字化SaaS云平臺、企微營銷助手、私有化獨(dú)立部署品牌網(wǎng)校和在線教育咨詢等。KESION 不斷通過技術(shù)創(chuàng)新,提供產(chǎn)品和服務(wù),助力企業(yè)向數(shù)字化轉(zhuǎn)型,通過科技驅(qū)動(dòng)商業(yè)革新,讓商業(yè)變得更智慧!
通常開發(fā)者希望轉(zhuǎn)發(fā)出去的小程序被二次打開的時(shí)候能夠獲取到一些信息,例如群的標(biāo)識。...
點(diǎn)擊右上角按鈕,會彈出菜單,菜單中的“轉(zhuǎn)發(fā)”選項(xiàng)默認(rèn)不展示。通過 wx.showShareMenu 和 wx.hideShareMenu 可動(dòng)態(tài)顯示、隱藏這個(gè)選項(xiàng)。...