登录描述
用户在页面中点击按钮,进行授权登录,点击确认后获取code,用code换取服务端的openid,完成授权登录
授权过程
wx.getUserProfile()获取用户信息。 页面产生点击事件(例如button上bindtap的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回userInfo参数:desc必传,声明获取用户个人信息后的用途,不超过30个字符
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
console.log(res.userInfo)
}
})
wx.login()调用接口,获取登录凭证(code) 通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识,及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
响应参数
code用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用auth.code2Session,使用code换取openid、unionid、session_key等信息.
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
- 完整代码
import { AtButton } from 'taro-ui'
const handleGetUser = () => {
Taro.getUserProfile({
desc: "用于完善会员资料",
success: res => {
userLogin()
Taro.showLoading({ title: "授权中...", mask: true });
},
fail: err => {
Taro.showToast({ title: "授权失败", icon: "none" });
},
complete: (res) => {
console.log('关闭授权弹窗', res)
},
});
}
const userLogin = () => {
Taro.login({
success(res) {
Taro.hideLoading()
console.log('login: ', res)
if (res.code) {
// todo 发起网络请求
Taro.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
<AtButton type='primary' onClick={handleGetUser}>调起小程序授权登录</AtButton>
- 小程序通过
wx.getUserProfile接口可以正常返回用户信息,无法弹出授权弹框。
对低于2.27.1版本的访问,将不会弹出授权弹框。降低版本到2.24.7可弹出。 - 微信小程序登录模式
小程序登录模式是Oauth2的授权码登录
对接内部的服务端,内部服务端扮演客户端模式
自此微信小程序的授权登录流程结束,获取到用户的信息以及openid,可以本地存储,后续做业务逻辑处理等。具体api的参数,可去微信小程序官方文档中查看。本人亲测有效,如有其他问题请留言