现在微信小程序要授权登录获取用户信息要使用getUserProfile,如果使用getUserInfo只能获取到匿名用户。
getUserProfile官方文档使用说明:
/* wx.getUserProfile (Object object)基础库 2.10.4 开始支持
获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo */
onLoad() {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
我将开发文档里对getUserProfile()的使用部分放上来了,如果想了解详细请移步开发文档
wx.getUserProfile(Object object) | 微信开放文档
下面我将在我程序里使用到的代码记录,因为是新手,对云开发和JS代码还是不太熟悉,可能错误,如果有大佬看到,麻烦给我留言
数据库的设置
首先要在数据库中创建一个存放用户信息的文件夹
点击云开发->数据库
?
js代码
const app = getApp();
//获取数据库实例
const db = wx.cloud.database()
Page({
/**
* 页面的初始数据
*/
data: {
userInfo:'',
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 自定义函数--授权登录
*/
login() {
var that = this;
wx.getUserProfile({
desc: '必须授权才能使用上',
success: res => {
that.setData({
userInfo: res.userInfo
})
//查看获取到的用户信息
// console.log(this.data.userInfo)
db.collection('user').where({
//在user中查看是否已保存用户信息,根据用户名称
nickName: that.data.userInfo.nickName
})
.get({
success: res=>{
//判断data是否为空
if(res.data.length == 0){
var userInfo = that.data.userInfo
//将用户信息保存到数据库的user中
db.collection('user').add({
data:{
nickName: userInfo.nickName,
avatarUrl: userInfo.avatarUrl,
//保存时的时间
time: that.js_date_time(new Date()),
},
success: res =>{
console.log('用户信息已保存到数据库',res)
},
fail: err => {
console.log('用户信息保存失败', err)
}
})
} else{
console.log("已记录过!!")
}
}
})
},
})
},
代码内容说明补充:
代码中先用户授权登录,然后再检查数据库中是否保存了用户信息使用到数据库的查询语句,(在做的时候发现获得_openId查询信息,来对用户进行核实,好像会更严谨,但我用了报错,目前还没有找出原因)
指定查询条件,返回带新查询条件的新的集合引用
db.collection('books').where({
publishInfo: {
country: 'United States'
}
}).get({
success: function(res) {
// 输出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})
?再使用Collection.add(options: Object)添加用户信息,
其实好像还涉及到云函数的使用,但我对云函数的使用还不太了解,等我搞清楚了,我再将步骤补齐
|