微信小程序如何获取用户信息及登录凭证
在小程序内,开发者可以通过 wx.login 接口直接获取用户的 openId 与 unionId 信息,实现微信身份登录,支持开发者在多个小程序或其它应用间匿名关联同一用户。
同时,为了满足部分小程序业务中需要创建用户的昵称与头像的诉求,平台提供了 wx.getUserProfile 接口,支持在用户授权的前提下,快速使用自己的微信昵称头像。
获取用户信息:wx.getUserProfile,页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回用户的信息。
官方示例代码:https://developers.weixin.qq.com/s/tsJaq2mP7Mp4
前端:
后端:
Page({
data: {
userInfo: {},
hasUserInfo: false,
canIUseGetUserProfile: false,
},
onLoad() {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
})
按官方示例验证后发现,这个 userInfo 中包含了用户的头像信息,但是是一个默认的灰色头像,用户昵称也获取不到。再查资料发现原来是它的规则改了。
按照新规则,更改代码,示例链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
Page({
data: {
avatarUrl: defaultAvatarUrl,
},
onChooseAvatar(e) {
const { avatarUrl } = e.detail
this.setData({
avatarUrl,
})
}
})
效果图:
用户登录:wx.login,调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',//你的后端URL
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
说了这么多,实际上看示例就知道前端只返回一个code用户登录凭证,有效期5分钟,剩下的要在服务端处理获取session_key等。session_key 具有唯一性,在使用小程序时,同一用户在同一时刻仅有一个有效的 session_key。用户越久未使用小程序,用户登录态越有可能过期。反之如果用户一直在使用小程序,则用户登录态一直保持有效。
调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台账号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台账号) 和 会话密钥 session_key。
对于初学者容易混淆,其实这里面有2个概念,一个是wx.login(),另一个是session_key。混淆点在于登录态失效过期和session_key失效过期需要重新获得session_key,这2个东西是什么关系?
调用wx.login()时,微信服务器会返回一个code,这时你是处于登录的状态,开发者拿着code,再发送请求到微信服务器去换取新的session_key;
因为session_key会过期,所以提供了wx.checkSession方法来验证session_key是否过期,那么sesssion_key过期怎么办,重新调用wx.login()方法获得新的code,因为拿到code才能去微信服务器获得新的session_key。用验证session_key是否过期的方法来表示登录是否过期,然而,只要session_key不过期,无需重新调用wx.login()。
wx.checkSession({
success () {
//session_key 未过期,并且在本生命周期一直有效
},
fail () {
// session_key 已经失效,需要重新执行登录流程
wx.login() //重新登录
}
})
如何获取用户信息和如何获取用户登录凭证就讲到这,觉得有用的小伙伴可以点赞收藏!
随便看看
- 2025-06-27 19:31:40机油不可乱用,一文告诉你5W-30和5W-40的区别
- 2025-05-20 18:17:21电阻识别、检测、应用与选型,小白必读!
- 2025-05-16 07:03:20雪梨直播安卓ios版免费下载!
- 2025-05-12 10:12:40dnf肩膀附魔宝珠有什么 dnf肩膀附魔宝珠大全
- 2025-05-21 11:31:06手表RHINE是什么牌子的?
- 2025-05-03 16:26:40交通部:全国共投放1200多万辆共享单车,平均每天2700多万人次骑行
- 2025-05-30 19:53:12宝鸡旅游攻略:炎帝故里、青铜器之乡 | 陕西宝鸡自由行指南
- 2025-05-13 03:36:04iphone4S 怎么激活?
- 2025-06-05 03:57:53ipad如何更换id账号(详细步骤)
- 2025-06-17 23:24:09完美贴合(Fit)