乐于分享
好东西不私藏

小程序手机号授权登录-uniapp实现

小程序手机号授权登录-uniapp实现

适用场景
1. 用户登录/注册:使用手机号快速登录或注册,提升用户体验
2. 身份验证:在敏感操作前进行身份验证,保障账户安全
3. 消息通知:绑定手机号后,可以通过短信发送通知
4. 支付验证:在支付过程中使用手机号进行验证
5. 会员服务:为会员提供个性化服务,如积分通知、活动提醒等
使用案例
<checkboxv-model="agreePrivacy" /><text @click="showPrivacy"class="link">《隐私协议》</text>
<button     open-type="getPhoneNumber"     @getphonenumber="getPhoneNumber"    type="primary"    class="login-btn"    :disabled="!agreePrivacy">手机号授权登录</button>
// 显示隐私协议showPrivacy() {    uni.navigateTo({    url'/pages/agreement/privacy'    });},
// 获取手机号getPhoneNumber(e) {    console.log('获取手机号回调', e);    if (e.detail.errMsg === 'getPhoneNumber:ok') {      // 授权成功,获取code      const code = e.detail.code;      // 发送code到后端解析手机号      this.sendCodeToServer(code);    } else {      // 用户拒绝授权      this.handleReject();    }},// 处理用户拒绝授权handleReject() {    uni.showModal({      title'授权提示',      content'获取手机号可以为您提供更便捷的服务,是否重新授权?',      success(res) => {        if (res.confirm) {        // 引导用户去设置页面开启权限        this.openSetting();        }      }    });},// 打开设置页面openSetting() {    uni.openSetting({      success(res) => {        console.log('设置页面操作结果', res.authSetting);      }    });},// 发送code到后端解析手机号sendCodeToServer(code) {    uni.showLoading({ title'登录中...' });    // 调用后端接口,使用code换取手机号并登录    uni.request({      url'https://your-server.com/api/login/phone',      method'POST',      data: { code },      success(res) => {        uni.hideLoading();        if (res.data.success) {          // 登录成功,存储用户信息          uni.setStorageSync('userInfo', res.data.userInfo);          uni.setStorageSync('token', res.data.token);          // 跳转到首页          uni.switchTab({            url'/pages/index/index'          });        } else {          uni.showToast({            title: res.data.message || '登录失败',            icon'none'          });        }    },    fail(err) => {        uni.hideLoading();        console.log('登录失败', err);        uni.showToast({          title'网络错误,请稍后重试',          icon'none'        });    }    });},
注意事项
1. 必须用户主动触发:手机号授权必须由用户主动点击按钮触发,不能自动弹出
2. 合理使用场景:只在必要的场景下请求手机号授权,避免过度收集用户信息
3. 明确告知用户:在请求授权前,应该明确告知用户获取手机号的用途
4. 保护用户隐私:获取到的手机号必须妥善保管,不得滥用或泄露
5. 处理授权失败:当用户拒绝授权时,应该提供其他登录或操作方式
隐私协议
根据相关法律法规和微信平台规范,小程序在获取用户手机号前,必须向用户展示隐私协议,并获得用户的同意

隐私协议应该包含以下内容:

1. 明确告知用户需要获取手机号

2. 说明获取手机号的用途

3. 承诺保护用户隐私

4. 告知用户如何管理个人信息

5. 提供用户反馈渠道

取消授权
1,小程序设置页:
• 打开小程序 → 点击右上角「…」→ 点击「设置」→ 进入「隐私设置」→ 关闭对应权限
2,应用设置页:
• iOS:设置 → 微信 → 隐私 → 关闭对应权限
• Android:设置 → 应用管理 → 微信 → 权限 → 关闭对应权限
3,应用内设置:在小程序内提供账号设置页面,允许用户解除手机号绑定
常见问题与解决方案
1,手机号授权不弹出
    原因:用户之前拒绝过授权,或已被禁止授权
    解决方案:引导用户进入小程序设置页面手动开启
2,获取手机号失败
原因:
    • code 过期或无效
    • 后端解密失败
    • 网络错误
解决方案:
    • 确保在5分钟内使用code
    • 检查后端session_key是否正确
    • 优化网络请求处理
3,手机号显示为undefined
    原因:后端解密失败或返回格式错误
    解决方案:检查后端解密逻辑和返回数据格式