欧美日韩中文一区二区,亚洲天堂av在线,亚洲最大成人免费视频,欧美最新精品

微信小程序開發(fā)用戶信息獲取和授權(quán)代碼教程

我們在使用微信小程序開發(fā)工具的時(shí)候,我們需要先創(chuàng)建一個(gè)項(xiàng)目,看微信官網(wǎng)給我們自動(dòng)生成的代碼。

首先我們看一下app.js代碼:

App({

onLaunch: function () {

// 展示本地存儲(chǔ)能力

var logs = wx.getStorageSync(‘logs’) || []

logs.unshift(Date.now())

wx.setStorageSync(‘logs’, logs)

// 登錄

wx.login({

success: res => {

// 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId

}

})

// 獲取用戶信息

wx.getSetting({

success: res => {

if (res.authSetting[‘scope.userInfo’]) {

// 已經(jīng)授權(quán),可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會(huì)彈框

wx.getUserInfo({

success: res => {

// 可以將 res 發(fā)送給后臺(tái)解碼出 unionId

this.globalData.userInfo = res.userInfo

// 由于 getUserInfo 是網(wǎng)絡(luò)請求,可能會(huì)在 Page.onLoad 之后才返回

// 所以此處加入 callback 以防止這種情況

if (this.userInfoReadyCallback) {

this.userInfoReadyCallback(res)

}

},

fail:res=>{

wx.showToast({

title: ‘getUserInfo failed’,

icon: ‘none’,

duration: 2000

})

}

})

}else{

wx.showToast({

title: ‘沒有授權(quán)’,

icon: ‘success’,

duration: 2000

})

}

}

})

},

globalData: {

userInfo: null

}

})

上面的代碼共發(fā)三部分,分別是本地存儲(chǔ)能力展示,微信登錄展示和用戶信息獲取功能展示。由上可知通過wx.login方法得到res.code,然后將其發(fā)到后臺(tái)調(diào)用微信接口可以獲取openid等信息。

wx.getSetting方法

該方法是獲取用戶設(shè)置信息,通過此方法得到用戶對當(dāng)前程序的授權(quán)設(shè)置情況,如是否有獲取頭像權(quán)限。

用戶權(quán)限配置檢查

if (res.authSetting[‘scope.userInfo’])

這個(gè)意思是用戶是否設(shè)置了用戶授權(quán),如果沒有,我們會(huì)彈出一個(gè) “沒有授權(quán)”提示。如果已經(jīng)授權(quán)了,我們就使用wx.getUserInfo方法獲取資料。注意的是,因?yàn)檫@個(gè)方法是訪問網(wǎng)絡(luò)遠(yuǎn)程的數(shù)據(jù),因?yàn)樵谠L問等待結(jié)果之前,可能我們的默認(rèn)頁面(小程序第一個(gè)頁面也是就我們常說的首頁)已經(jīng)加載完了。那么怎么判斷我們的頁面加載早于這個(gè)方法的結(jié)果返回之前呢?這里有一個(gè)巧妙的方法。我們先看一下index頁面的js文件內(nèi)容:

//index.js

//獲取應(yīng)用實(shí)例

const app = getApp()

Page({

data: {

motto: ‘Hello World’,

userInfo: {},

hasUserInfo: false,

canIUse: wx.canIUse(‘button.open-type.getUserInfo’)

},

//事件處理函數(shù)

bindViewTap: function() {

wx.navigateTo({

url: ‘../logs/logs’

})

},

onLoad: function () {

console.log(‘page onload’);

if (app.globalData.userInfo) {

console.log(‘set data’);

this.setData({

userInfo: app.globalData.userInfo,

hasUserInfo: true

})

} else if (this.data.canIUse){

console.log(‘canIUse’);

// 由于 getUserInfo 是網(wǎng)絡(luò)請求,可能會(huì)在 Page.onLoad 之后才返回

// 所以此處加入 callback 以防止這種情況

app.userInfoReadyCallback = res => {

console.log(‘get call back’);

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

} else {

console.log(‘兼容處理’);

// 在沒有 open-type=getUserInfo 版本的兼容處理

wx.getUserInfo({

success: res => {

console.log(‘get user info success’)

app.globalData.userInfo = res.userInfo

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

})

}

},

getUserInfo: function(e) {

console.log(‘do get user info’+e);

if(e){

app.globalData.userInfo = e.detail.userInfo

this.setData({

userInfo: e.detail.userInfo,

hasUserInfo: true

})

}else{

console.log(‘用戶選擇了拒絕’);

}

}

})

上面代碼,我們重點(diǎn)看onLoad這個(gè)方法里,這里做了三個(gè)判斷,第一種情況判斷app.globalData.userInfo是否有值 ,如果有那就直接給頁面的數(shù)據(jù)賦值。

第二種情況判斷當(dāng)前微信是否支持button.open-type.getUserInfo這個(gè)版本屬性,如果有,那么重點(diǎn)來了:我們給app頁面增加一個(gè)方法userInfoReadyCallback,這個(gè)方法作用就是接收wx.getUserInfo的結(jié)果,然后賦值給index頁面中的數(shù)據(jù)。


聲明:本站部分文章來源于互聯(lián)網(wǎng),如有侵犯作者著作權(quán),請及時(shí)與我們聯(lián)系。

木魚小鋪小程序

為您推薦

主站蜘蛛池模板: 南岸区| 凉城县| 康马县| 阳东县| 鄂托克旗| 拉萨市| 女性| 梨树县| 隆化县| 宁波市| 固始县| 睢宁县| 岢岚县| 高陵县| 湖北省| 鹤岗市| 九龙城区| 宾川县| 太康县| 凤庆县| 全南县| 宜良县| 禹城市| 广南县| 庆城县| 交口县| 万年县| 锦屏县| 碌曲县| 汉沽区| 桦南县| 嘉兴市| 浦县| 鹤峰县| 沾益县| 当涂县| 定远县| 会理县| 津市市| 海安县| 娄烦县|