詳解使用uni-app開(kāi)發(fā)微信小程序之登錄模塊
從微信小程序官方發(fā)布的公告中我們可獲知:小程序體驗(yàn)版、開(kāi)發(fā)版調(diào)用 wx.getUserInfo 接口,將無(wú)法彈出授權(quán)詢問(wèn)框,默認(rèn)調(diào)用失敗,需使用 <button open-type="getUserInfo"></button> 引導(dǎo)用戶主動(dòng)進(jìn)行授權(quán)操作:
1.當(dāng)用戶未授權(quán)過(guò),調(diào)用該接口將直接報(bào)錯(cuò)
2.當(dāng)用戶授權(quán)過(guò),可以使用該接口獲取用戶信息
但在實(shí)際開(kāi)發(fā)中我們可能需要彈出授權(quán)詢問(wèn)框,因此需要我們自己來(lái)寫(xiě)模擬授權(quán)彈框(主要是對(duì)<buttonopen-type="getUserInfo"></button>的包裹+用戶是否是第一次授權(quán)判斷來(lái)顯示該頁(yè)面),代碼如下:
1.頁(yè)面結(jié)構(gòu)
<template> <view> <!-- #ifdef MP-WEIXIN --> <view v-if="isCanUse"> <view> <view class='header'> <image src='../../static/img/wx_login.png'></image> </view> <view class='content'> <view>申請(qǐng)獲取以下權(quán)限</view> <text>獲得你的公開(kāi)信息(昵稱,頭像、地區(qū)等)</text> </view> <button class='bottom' type='primary' open-type="getUserInfo" withCredentials="true" lang="zh_CN" @getuserinfo="wxGetUserInfo"> 授權(quán)登錄 </button> </view> </view> <!-- #endif --> </view> </template>
這里的isCanUse是用來(lái)記錄當(dāng)前用戶是否是第一次授權(quán)使用的,wx_login.png圖在底部下載獲取即可。
2.樣式
<style> .header { margin: 90rpx 0 90rpx 50rpx; border-bottom: 1px solid #ccc; text-align: center; width: 650rpx; height: 300rpx; line-height: 450rpx; } .header image { width: 200rpx; height: 200rpx; } .content { margin-left: 50rpx; margin-bottom: 90rpx; } .content text { display: block; color: #9d9d9d; margin-top: 40rpx; } .bottom { border-radius: 80rpx; margin: 70rpx 50rpx; font-size: 35rpx; } </style>
3.腳本部分
<script> export default { data() { return { SessionKey: '', OpenId: '', nickName: null, avatarUrl: null, isCanUse: uni.getStorageSync('isCanUse')||true//默認(rèn)為true }; }, methods: { //第一授權(quán)獲取用戶信息===》按鈕觸發(fā) wxGetUserInfo() { let _this = this; uni.getUserInfo({ provider: 'weixin', success: function(infoRes) { let nickName = infoRes.userInfo.nickName; //昵稱 let avatarUrl = infoRes.userInfo.avatarUrl; //頭像 try { uni.setStorageSync('isCanUse', false);//記錄是否第一次授權(quán) false:表示不是第一次授權(quán) _this.updateUserInfo(); } catch (e) {} }, fail(res) {} }); }, //登錄 login() { let _this = this; uni.showLoading({ title: '登錄中...' }); // 1.wx獲取登錄用戶code uni.login({ provider: 'weixin', success: function(loginRes) { let code = loginRes.code; if (!_this.isCanUse) { //非第一次授權(quán)獲取用戶信息 uni.getUserInfo({ provider: 'weixin', success: function(infoRes) { //獲取用戶信息后向調(diào)用信息更新方法 let nickName = infoRes.userInfo.nickName; //昵稱 let avatarUrl = infoRes.userInfo.avatarUrl; //頭像 _this.updateUserInfo();//調(diào)用更新信息方法 } }); } //2.將用戶登錄code傳遞到后臺(tái)置換用戶SessionKey、OpenId等信息 uni.request({ url: '服務(wù)器地址', data: { code: code, }, method: 'GET', header: { 'content-type': 'application/json' }, success: (res) => { //openId、或SessionKdy存儲(chǔ)//隱藏loading uni.hideLoading(); } }); }, }); }, //向后臺(tái)更新信息 updateUserInfo() { let _this = this; uni.request({ url:'url' ,//服務(wù)器端地址 data: { appKey: this.$store.state.appKey, customerId: _this.customerId, nickName: _this.nickName, headUrl: _this.avatarUrl }, method: 'POST', header: { 'content-type': 'application/json' }, success: (res) => { if (res.data.state == "success") { uni.reLaunch({//信息更新成功后跳轉(zhuǎn)到小程序首頁(yè) url: '/pages/index/index' }); } } }); } }, onLoad() {//默認(rèn)加載 this.login(); } } </script>
4.最終效果如下:
wx_login.png圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript樹(shù)結(jié)構(gòu)深度優(yōu)先算法
這篇文章主要介紹了JavaScript樹(shù)結(jié)構(gòu)深度優(yōu)先算法,樹(shù)結(jié)構(gòu)可以說(shuō)是前端中最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之一,比如說(shuō)DOM樹(shù)、級(jí)聯(lián)選擇、樹(shù)形組件,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-07-07如何在vscode中使用Typescript并運(yùn)行詳解
在VSCode中編寫(xiě)的TypeScript代碼不能直接運(yùn)行,需要先用tsc編譯為JavaScript,然后才能運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于如何在vscode中使用Typescript并運(yùn)行的相關(guān)資料,需要的朋友可以參考下2023-05-05JavaScript DOM節(jié)點(diǎn)操作方法總結(jié)
下面小編就為大家?guī)?lái)一篇JavaScript DOM節(jié)點(diǎn)操作方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08js中通過(guò)getElementsByName訪問(wèn)name集合對(duì)象的方法
下面小編就為大家?guī)?lái)一篇js中通過(guò)getElementsByName訪問(wèn)name集合對(duì)象的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10Openlayers實(shí)現(xiàn)根據(jù)半徑繪制圓形
這篇文章主要介紹了利用Openlayers實(shí)現(xiàn)繪制三個(gè)圓形,繪制完成之后,三個(gè)圓心連接起來(lái),然后標(biāo)記出每?jī)蓚€(gè)圓心之間的距離,感興趣的可以了解一下2022-08-08獲取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)
下面小編就為大家?guī)?lái)一篇獲取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06追蹤discord.js中刪除消息的用戶方法實(shí)例詳解
這篇文章主要為大家介紹了如何追蹤discord.js中刪除消息的用戶方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01