登录流程如下
- 登录,
wx.login拿到code,调用后端接口 - 后端通过
appId、appsecret、code获取session_key和openid - 后端自定义登录态,与
openid、sessiong_key关联,返回自定义登录态给前端 - 前端拿到登录态(token),后续拿
token请求接口即可。
登录的同时要加手机号验证,流程如下:
- 前端点击一键登录按钮,按钮绑定
open-type="getPhoneNumber" - 在
@getphonenumber的回调中拿到手机code码 - 拿到手机
code码后,接着调用wx.login获取登录code码 - 调用登录接口,同时将手机
code码、登录code码传给后端 - 后端首先拿登录
code码获取openid、sessiong_key等信息,然后调用getAccessToken接口获取access_token - 通过
access_token调用获取getPhoneNumber接口获取手机号 - 后端自定义登录态,关联手机号,逻辑根据实际情况调整
- 返回登录态(token)以及其它附带信息给前端
登录跟获取手机号可以拆开,有些类型的小程序仅登录就好了,不需要手机号参与,这两个功能在小程序端是分开的模块,如果你的业务里需要登录时验证手机号,可以将登录和获取手机号的逻辑整合到一起。
参考文档:
小程序登录文档
wx.login
手机号快速验证组件
快速验证-获取手机号
获取接口调用凭据getAccessToken
通过code获取网站授权 access_token
小程序帐号登录规范要求与修改指引
获取手机号code
通过开放能力open-type实现 open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"
需要注意,微信小程序开发者账号必须认证且隐私协议完善后才可以调用该API
<button type="primary" :style="customStyle.sure" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
一键登录
</button>const getPhoneNumber = (e) => {
try {
if (e.detail.errno == 112) {
// 获取失败的状态,自定义处理
return getApp().errFeedback(e.detail);
}
if(e.detail.errMsg == 'getPhoneNumber:fail user deny'){
uni.showToast({
title: '您已拒绝授权,相关功能将不可用',
icon: 'none',
duration: 1000
});
return;
}
console.log('获取手机号', e.detail.code);
} catch (err) {
console.log(err);
} finally {
}
};同意授权的返回
如果拒绝授权,则返回:
获取AccessToken
在这里生成AppSecret
const getAccessToken = async (code) => {
return new Promise((resolve, reject) => {
uni.request({
method: 'GET',
url: `https://api.weixin.qq.com/cgi-bin/token`,
data: {
grant_type: 'client_credential', // 固定值
appid: '你的appid',
secret: '你的AppSecret'
},
dataType: 'json',
success: (response) => {
console.log('获取access_token', response);
if (response.statusCode != 200) {
uni.showToast({
title: '获取登录凭证失败~',
icon: 'none',
duration: 1000
});
return;
}
let { data } = response;
resolve(data.access_token);
},
fail: (err) => {
console.log('请求失败', err);
}
});
});
};成功的响应:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。