授权登录是为了获取用户得信息、昵称、以及头像id,若没有授权登录,用户无法正常访问并使用小程序。
小程序授权登录流程,如下图:
一、小程序的状态有哪几种状态以及发展的方式
如上图所示,我个人归纳为三种
1,未授权状态
2,授权未注册状态
3,授权未登录状态
1.判断是否有授权
1.在进入小程序的时候要判断是否有授权,如果没有授权,则要先授权之后,才能登陆到小程序的首页。
wx.getSetting({
// 用户获取当前小程序授权状态
success(res) {
console.log(res.authSetting["scope.userInfo"])
// 判断它是否为true
if (res.authSetting["scope.userInfo"]) {
// 证明我已经授权过
console.log("授权")
} else {
// 未授权,就跳转到授权的button按钮页面,也可以是个人信息页面
console.log("未授权")
// 先跳转至用户授权登录页面
wx.navigateTo({
url: '../../pages/login/login',
})
}
}
})
2.若已经授权
若已经授权,获取用户信息,存在全局的data里,若没有授权,跳转到login页,进行授权操作
使用 button 组件,并将 open-type 指定为 getUserInfo 类型,获取用户基本信息
就是 通过点击按钮 触发 getUserInfo 接口 获取用户信息
用户点击 授权登录 就可以获取到 用户的信息
<view>
<!-- 小程序里的组件 已封装好的 -->
<!-- bindgetuserinfo用户点击该按钮时,会返回获取到的数据 -->
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo">
用户授权登录
</button>
<image src="../../icon_png/111.png" class="aaa"></image>
</view>
<!-- 默认不显示 -->
<view wx:if="{{userInfo.nickName}}" class="xinxi">
<text>
昵称:{{userInfo.nickName}}
</text>
<text>
<!-- 性别: {{userInfo.gender==1?'男': '女'}} -->
</text>
<view>
<image src="{{userInfo.avatarUrl}}"></image>
</view>
</view>
3.授权
授权成功,获取用户信息成功之后,将用户信息存储在本地缓存中指定的 userInfo 中,然后跳转到小程序首页
// 登录** // 进入授权button的binggetuserinfo回调 // 调用 wx.login获取code
login() {
wx.login({
success: async (res) => {
console.log(res.code); // 打印临时凭证
if (res.code) {
let { //发起网络请求
data
} = await ajaxLogin(res.code);
if (data.code != 10000) {
// 登录
wx.setStorage({ // 进行存储
data: data.data.token, //存储得是token
key: 'token',
})
wx.switchTab({
url: '../index/index',
})
} else {
// 注册
this.zhuce()
}
} else {
console.log("登录失败!" + res.errMsg);
}
}
});
},
// 注册
zhuce() {
wx.login({
success: async res => {
let {
data: hh
} = await ajaxZhu({
code: res.code,
encryptedData: this.data.encryptedData,
iv: this.data.iv
})
if (hh.code == 0) {
this.login()
}
}
})
},
登录的时候 还需要调用一下 wx.login() 方法
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成
总结
由于APP中有些页面默认需要登录的,如[个人中心]页面,需要登录获取到用户信息,才能继续操作。
总归来说就是:1.在进入小程序的时候要判断是否有授权,如果没有授权,则要先授权之后,才能登陆到小程序的首页。
刚开始,我把login页当作了小程序的首页,这样导致如果已经授权过,这个页面也会一闪而过。用户体验不好。捋了一下思路之后认为,应该把授权的判断放在app.js中onLaunch生命周期里,首页还是正常的index页面。
若已经授权,获取用户信息,存在全局的data里,若没有授权,跳转到login页,进行授权操作
2.授权成功,获取用户信息成功之后,将用户信息存储在本地缓存中指定的 userInfo 中,然后跳转到小程序首页
3.之后不论在哪个页面,如果需要用户信息,从本地缓存中异步获取指定 userInfo 的内容即可