11《白小云》之我的-用户认证与授权设计
2019-11-12 本文已影响0人
白龙马5217
1 app.js里在onShow() 里调用getUserIdC()
onShow: function() {
console.log("onShow");
this.getOpenIdC(); //获取用户授权
},
2 getUserIdC()先用云函数获取openid,用此openid查询userinfo里是否已有,如果有就取用户信息,并设置到globalData项下userinfo和myOpenid
//从云函数取Openid 改为同步
async getOpenIdC() {
console.log("1 in getOpenIdC");
await wx.cloud.callFunction({
name: "login", //云函数名称
data: {} //云函数参数
})
.then(res => {
let myid = res.result.openid //openid
console.log("1.1 myid:", myid);
//openid 保存到全局变量里
this.globalData.myOpenid = myid;
console.log("1.2 app.globalData.myOpenid", this.globalData.myOpenid);
})
.catch(err => {
console.log(err);
});
await this.getOpenId();
console.log("3 in getOpenIdC end ");
},
3 getOpenId()代码如下:
//从userinfo集合获取openid
async getOpenId() {
console.log("2 in getOpenId");
const myid = this.globalData.myOpenid;
console.log("2.1 myid", myid);
//从userinfo集合获取openid
await wx.cloud.callFunction({
name: 'exesql',
data: {
type: "count", //指定操作是count
dbc: "userinfo", //指定操作的数据表(集合)
wherec: {
_openid: myid //还要加个openid
}
}
})
.then(res => {
let cnt = res.result.total; //已授权
console.log('[云函数] [countDB] 已执行', res.result.total);
if (cnt > 0) { //获取userinfo
wx.getUserInfo({
success: res => {
this.globalData.userInfo = res.userInfo
}
})
}
})
.catch(err => {
console.log('[云函数] [countDB] 执行失败', err)
})
4 my.j's用户授权后取到用户信息和openid 保存到数据库userinfo集合中,全部代码如下:
//index.js
//获取应用实例
const app = getApp()
const db = wx.cloud.database();
const db_userinfo = db.collection('userinfo');
Page({
data: {
openid: "",
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
//事件处理函数
/*
bindViewTap: function () {
wx.navigateTo({
url: '../logs/logs'
})
},
*/
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
},
getUserInfo: function (e) {
console.log("in getUserInfo",e);
const userinf = e.detail.userInfo;
app.globalData.userInfo = userinf;
this.getOpenid(); //获取openid
//userinfo用户信息保存到数据库中
this.insertData(userinf)
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
//userinfo保存到云数据库中
insertData(userinf) {
console.log("in insertData",userinf);
db_userinfo.add({
data: userinf
})
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
},
//直接获取openid
getOpenid() {
console.log("in getOpenid");
wx.cloud.callFunction({
name: "login", //云函数名称
data: {} //云函数参数
})
.then(res => {
let myid = res.result.openid //openid
console.log(myid);
//openid 保存到全局变量里
app.globalData.myOpenid = myid;
console.log("app.globalData.myOpenid", app.globalData.myOpenid);
})
.catch(err => {
console.log(err);
})
}
})