詳解使用uni-app開發(fā)微信小程序之登錄模塊
從微信小程序官方發(fā)布的公告中我們可獲知:小程序體驗(yàn)版、開發(fā)版調(diào)用 wx.getUserInfo 接口,將無法彈出授權(quán)詢問框,默認(rèn)調(diào)用失敗,需使用 <button open-type="getUserInfo"></button> 引導(dǎo)用戶主動進(jìn)行授權(quán)操作:
1.當(dāng)用戶未授權(quán)過,調(diào)用該接口將直接報錯
2.當(dāng)用戶授權(quán)過,可以使用該接口獲取用戶信息
但在實(shí)際開發(fā)中我們可能需要彈出授權(quán)詢問框,因此需要我們自己來寫模擬授權(quán)彈框(主要是對<buttonopen-type="getUserInfo"></button>的包裹+用戶是否是第一次授權(quán)判斷來顯示該頁面),代碼如下:
1.頁面結(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>申請獲取以下權(quán)限</view>
<text>獲得你的公開信息(昵稱,頭像、地區(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是用來記錄當(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傳遞到后臺置換用戶SessionKey、OpenId等信息
uni.request({
url: '服務(wù)器地址',
data: {
code: code,
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: (res) => {
//openId、或SessionKdy存儲//隱藏loading
uni.hideLoading();
}
});
},
});
},
//向后臺更新信息
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)到小程序首頁
url: '/pages/index/index'
});
}
}
});
}
},
onLoad() {//默認(rèn)加載
this.login();
}
}
</script>
4.最終效果如下:

wx_login.png圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript使用cookie實(shí)現(xiàn)記住賬號密碼功能
這篇文章主要介紹了JavaScript使用cookie實(shí)現(xiàn)記住賬號密碼功能,本文直接給出完整測試代碼,需要的朋友可以參考下2015-04-04
JS組件系列之Bootstrap table表格組件神器【終結(jié)篇】
Bootstrap Table是輕量級的和功能豐富的以表格的形式顯示的數(shù)據(jù),支持單選,復(fù)選框,排序,分頁,顯示/隱藏列,固定標(biāo)題滾動表,響應(yīng)式設(shè)計(jì),Ajax加載JSON數(shù)據(jù),點(diǎn)擊排序的列,卡片視圖等。本文給大家介紹JS組件系列之Bootstrap table表格組件神器【終結(jié)篇】,一起學(xué)習(xí)吧2016-05-05
bootstrap實(shí)現(xiàn)的自適應(yīng)頁面簡單應(yīng)用示例
這篇文章主要介紹了bootstrap實(shí)現(xiàn)的自適應(yīng)頁面簡單應(yīng)用,結(jié)合具體實(shí)例形式分析了基于bootstrap的列表布局結(jié)構(gòu)頁面實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-03-03
HTML+CSS+JS實(shí)現(xiàn)抓娃娃機(jī)游戲
這篇文章主要介紹了如何利用HTML+CSS+JS制作抓娃娃機(jī)游戲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
javascript 處理HTML元素必須避免使用的一種方法
我們在編寫前臺頁面的時候,可能經(jīng)常會用到“javascript+數(shù)據(jù)”生成頁面元素的方法,但當(dāng)我們要處理的數(shù)據(jù)量較大,導(dǎo)致頁面需要展現(xiàn)過多的控件的時候,頁面的響應(yīng)速度也會直線下降2009-07-07
純JavaScript實(shí)現(xiàn)猜數(shù)字游戲
這篇文章主要為大家詳細(xì)介紹了純JavaScript實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
動態(tài)改變div的z-index屬性的簡單實(shí)例
這篇文章介紹了動態(tài)改變div的z-index屬性的簡單實(shí)例,有需要的朋友可以參考一下2013-08-08

