小程序授权登录全量避坑!手机号授权、静默登录、自动登录失效解决
登录授权是小程序必备功能,也是BUG重灾区:静默登录失败、手机号获取失败、授权弹窗不弹出、用户拒绝授权后无法二次唤起、登录态过期错乱等。本篇针对小程序最新授权规则,详解全场景避坑方案。
一、坑点1:新版小程序无法自动唤起手机号授权
微信新版本已废弃自动弹窗获取手机号,很多旧项目代码失效,直接报错无法获取用户手机号。
解决方案:必须使用button按钮触发手机号授权,绑定open-type="getPhoneNumber",通过回调解密获取手机号,禁止直接API调用。
二、坑点2:用户拒绝授权后永久无法弹窗
用户第一次点击拒绝授权,后续永久不弹出授权窗口,导致功能无法使用,无任何提示。
解决方案:授权失败后监听错误码,判断用户拒绝状态,弹窗引导用户手动开启授权设置,调用wx.openSetting跳转设置页。
三、坑点3:静默登录code重复使用、登录态错乱
wx.login获取的code只能使用一次,很多开发者重复提交code,导致后端解密失败、登录失效、token错乱。
解决方案:获取code后立即请求接口,不缓存code;登录成功后本地缓存token,失效后重新静默登录。
四、坑点4:登录态过期未刷新,接口401频繁报错
只做登录不做续期,用户长时间停留在页面,token过期后所有接口报错,体验极差。
解决方案:封装全局token过期拦截,检测401状态码,自动静默登录刷新token,无感知续期。
五、坑点5:开发者工具登录正常,真机登录失败
工具端模拟登录正常,真机code解密失败,核心是未配置小程序AppSecret、项目未开启合法校验。
解决方案:后端使用正式AppID与AppSecret解密,测试环境与生产环境配置隔离。
六、坑点6:授权回调异步导致页面数据加载失败
页面onLoad先加载接口,后执行登录授权,导致无token请求接口,数据加载失败。
解决方案:页面初始化优先执行登录逻辑,等待登录完成后再请求业务接口,保证登录态优先。
文末总结:新版小程序授权核心规则:必须用户主动触发、拒绝可手动恢复、code一次性有效、token自动续期,遵循规则即可解决所有登录授权问题。
