.1进入登陆页,onLoad调用uni.getSetting,从响应数据看是否授权,如无授权,需点击登陆按钮,
2点击登陆按钮,@getuserinfo监听了用户点击授权的接收或者拒绝,如果拒绝,不用操作了。点击接受,从@getuserinfo事件解构出后台需要的参数。
3.解构出参数,在@getuserinfo事件里发请登陆请求。(如果请求需要code,调用uni.login()解构出code,再发送请求),登陆请求发送后,调用uni.setStorageSync保存后台响应的token。并返回上一步。
4.如果进来时已经授权,判断是否授权用 const [error, res] = await uni.getSetting();if (res.authSetting[“scope.userInfo”]) ;调用uni.getUserInfo();解构出登陆需要的参数,调用登陆函数。
vue组件:
<template>
<view>
<button open-type="getUserInfo" @getuserinfo="getUserInfo" type="primary">
微信登陆
</button>
</view>
</template>
<script>
export default {
methods: {
// 点击登陆按钮,弹出是否授权
getUserInfo(res) {
// 用户拒绝
if (!res.detail.iv) return;
// 用户点击接受,解构用户相关数据
const { encryptedData, iv, rawData, signature } = res.detail;
// 发请请求
this.login(encryptedData, iv, rawData, signature);
},
// 登陆接口
async login(encryptedData, iv, rawData, signature) {
// 获取登陆凭证
const [err, res] = await uni.login();
console.log(res);
// 调用后端接口
const params = await this.http({
url: "/api/public/v1/users/wxlogin",
method: "post",
data: {
encryptedData,
iv,
rawData,
signature,
code: res.code,
},
});
console.log(params);
// 记录登陆状态
// uni.setStorageSync("token", message.token);
uni.setStorageSync("token", "2321412自己定detoken");
// 返回上一步操作
uni.navigateBack();
},
},
async onLoad() {
// 小程序提供了检测用户是否授权的相关Api
const [error, res] = await uni.getSetting();
console.log(res);
// 已授权
if (res.authSetting["scope.userInfo"]) {
const [error, res] = await uni.getUserInfo();
// 从用户信息解构请求所需信息
const { encryptedData, iv, rawData, signature } = res;
// 发送请求
this.login(encryptedData, iv, rawData, signature);
}
},
};
</script>
<style lang='less' scoped>
button {
width: 600rpx;
margin: 200rpx auto 0;
}
</style>