一、实现思路
- 刚开始进入小程序时,先判断是否授权。
- 如果没有授权,显示授权button按钮,让用户实现点击的功能,就是通过button组件去触发getUserInfo接口,通过调用 wx.login获取code码,读取登录接口,判断用户是否是新用户。
- 如果是新用户,则接着通过调用wx.login获取code码,然后读取注册接口,注册完之后在读取登录,保存后台返回的token,实现登录。
- 如果不是新用户,也是保存后台返回的token,则直接获取个人信息。
- 如果已经授权了,在判断token是否存在,如果不存在,则读取登录接口,跟上面步骤一样。如果存在,则直接跳过这个页面,进入首页。
二、实现登录的代码
1.app.js
代码如下(示例):
//获取用户信息
wx.getSetting({
success:res => {
if(res.authSetting['scope.userInfo']){
//已经授权,可以直接调用getUserInfo获取头像昵称,不会弹框
wx.getUserInfo({
success:res => {
//可以将res发送给后台解码出unionId
this.globaData.userInfo = res.userInfo
//由于getUserInfo是网络请求,可能会在Page.onLoad之后才返回
//所以此处加入callback以防止这种情况
if(this.userInfoReadyCallback){
this.userInfoReadyCallback(res)
}
}
})
}
}
})
2.用户点击button按钮
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo">获取头像昵称</button>
getLogin(){
wx.login({
success: async (res) => {
if(res.code){
//登录
let {data} = await request('/user/wxapp/login','POST',{
code:res.code
})
//data.code == 10000 没有注册
if(data.code == 10000){
wx.login({
success: async (r) => {
//注册
let {data: re} = await request('/user/wxapp/register/complex', "POST", {
code: r.code,
iv: this.data.iv,
encryptedData:this.data.encryptedData
})
this.getLogin()
}
})
}else{
wx.ssetStorageSync('token',data.data.token);
wx.setStorageSync('uId',data.data.uid);
this.getList()
this.setData({
hasUserInfo:true,
user:data.data,
uId:data.data.uid
})
}
}else{
console.log('登录失败' + res.errMsg);
}
}
})
},
getUserInfo: async function(e) {
this.setData({
iv:e.detail.iv,
encryptedData:e.detail.encryptedData
})
app.globalData.userInfo = e.detail.userInfo
if(e.detaill.userInfo){
this.getLogin()
this.setData({
userInfo: e.detail.userInfo,
detail: e.detail,
})
}
}
```c
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。