微信小程序登陆
官方文档
登陆时序图:
微信小程序前端:
<button type="primary" plain open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo">
登录
</button>
handleGetUserInfo(e) {
// console.log(e.detail.userInfo);
if (e.detail.userInfo) {
// 将用户登陆信息保存到本地
//console.log("登陆信息:" + e.detail.userInfo);
wx.setStorageSync('userInfo', e.detail.userInfo);
this.setData({
isLogin: true
})
wx.login({
success: function(res){
let code = res.code;
request({
url: "/js/stuquery/login",
data: code,
header: {
"Content-Type":"application/json"
},
method: 'POST'
})
.then(result => {
//判断登陆之后,返回的个人信息是否为空,如果个人信息为空的话,说明账号未被绑定,登陆状态不写入本次存储
if(JSON.stringify(result.data) !== '{}'){
wx.setStorageSync('student', result.data.student);
}
})
}
})
// 刷新页面
this.onShow();
} else {
console.log("用户拒绝授权!");
}
}
一般来说,我们登陆的目的是两个:
- 登陆之后,获取我们自己服务器上的信息
- 微信登陆之后获取微信用户的信息
我尝试过使用wx.login之后获取微信用户的信息,即调用wx.getuserinfo,但是,这会有一个问题,可能会无法获取到用户的授权(按照我们平常的思路应该是,用户点击登陆之后,微信小程序弹出授权弹框)
比如这样:
<button type="primary" plain bind:click="login">
登录
</button>
login(){
let _this = this;
wx.login({
success: function(res){
// 1. 获取code
let code = res.code;
// console.log(code)
request({
url: "/js/stuquery/login",
data: code,
header: {
"Content-Type":"application/json"
},
method: 'POST'
})
.then(result => {
// 判断是否绑定了
wx.setStorageSync('result', result.data);
wx.setStorageSync('student', result.data.student);
_this.setData({
isLogin: true
})
wx.getSetting({
success: function(res){
// 如果用户没有授权
console.log(res.authSetting['scope.userInfo'] === undefined);
if (undefined===res.authSetting['scope.userInfo']) {
console.log("开始授权");
wx.authorize({
scope: 'scope.userInfo',
success(){
console.log('授权完成')
},
fail(){
console.log("授权失败")
}
})
}else{
console.log("用户已经授权")
}
}
})
})
}
})
},
像上面这种做法,不知道是什么原因,wx.authorize无法调起弹框获取用户授权,所以一直是fail的状态
分类:
开发 / 框架 / 微信小程序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现