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

微信小程序開發用戶信息獲取和授權代碼教程

我們在使用微信小程序開發工具的時候,我們需要先創建一個項目,看微信官網給我們自動生成的代碼。

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

App({

onLaunch: function () {

// 展示本地存儲能力

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

logs.unshift(Date.now())

wx.setStorageSync(‘logs’, logs)

// 登錄

wx.login({

success: res => {

// 發送 res.code 到后臺換取 openId, sessionKey, unionId

}

})

// 獲取用戶信息

wx.getSetting({

success: res => {

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

// 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框

wx.getUserInfo({

success: res => {

// 可以將 res 發送給后臺解碼出 unionId

this.globalData.userInfo = res.userInfo

// 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回

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

if (this.userInfoReadyCallback) {

this.userInfoReadyCallback(res)

}

},

fail:res=>{

wx.showToast({

title: ‘getUserInfo failed’,

icon: ‘none’,

duration: 2000

})

}

})

}else{

wx.showToast({

title: ‘沒有授權’,

icon: ‘success’,

duration: 2000

})

}

}

})

},

globalData: {

userInfo: null

}

})

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

wx.getSetting方法

該方法是獲取用戶設置信息,通過此方法得到用戶對當前程序的授權設置情況,如是否有獲取頭像權限。

用戶權限配置檢查

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

這個意思是用戶是否設置了用戶授權,如果沒有,我們會彈出一個 “沒有授權”提示。如果已經授權了,我們就使用wx.getUserInfo方法獲取資料。注意的是,因為這個方法是訪問網絡遠程的數據,因為在訪問等待結果之前,可能我們的默認頁面(小程序第一個頁面也是就我們常說的首頁)已經加載完了。那么怎么判斷我們的頁面加載早于這個方法的結果返回之前呢?這里有一個巧妙的方法。我們先看一下index頁面的js文件內容:

//index.js

//獲取應用實例

const app = getApp()

Page({

data: {

motto: ‘Hello World’,

userInfo: {},

hasUserInfo: false,

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

},

//事件處理函數

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 是網絡請求,可能會在 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(‘用戶選擇了拒絕’);

}

}

})

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

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


聲明:本站部分文章來源于互聯網,如有侵犯作者著作權,請及時與我們聯系。

木魚小鋪小程序

為您推薦

主站蜘蛛池模板: 崇礼县| 合作市| 滨州市| 潞西市| 永福县| 安阳市| 寿光市| 大丰市| 紫阳县| 清苑县| 曲沃县| 肇庆市| 大连市| 宁陵县| 通化县| 满城县| 仙游县| 黄陵县| 陆河县| 阿合奇县| 苍梧县| 玛曲县| 隆尧县| 长海县| 广水市| 论坛| 陈巴尔虎旗| 九江县| 静宁县| 琼海市| 垫江县| 观塘区| 长顺县| 拉萨市| 资源县| 伊金霍洛旗| 平原县| 论坛| 浏阳市| 手游| 德州市|