小程序用户登录体系实践手记:微信授权、openid 与会话管理
上个月帮一个做社区团购的朋友上线微信小程序,第一个卡住的不是页面,而是登录体系:用户点进来要不要授权?openid 怎么拿?会话过期了怎么办?这些看似基础的问题,配置不好会直接影响转化。这篇记录整个登录体系的搭建过程,给正在做小程序的朋友参考。
一、先理解微信登录的机制
小程序登录和网页登录完全不同:没有用户名密码,核心是 openid——微信给每个用户在小程序内的唯一标识。整个链路是:
- 前端调用
wx.login获取临时凭证 code; - 后端拿 code 换 openid(调用 auth.code2Session 接口);
- 用 openid 关联业务用户,签发自己的登录态。
这里的要点:openid 不能直接暴露给前端,它应该只存在于后端,前端用后端签发的 token 通信。
二、授权策略:别一上来就要手机号
很多小程序死在第一步:用户点开就要授权手机号,直接劝退。我的策略分两步:
- 静默登录:进入页面就静默调
wx.login,后端签发临时 token,用户无感完成"匿名登录"; - 按需授权:只有在下单、领券等真正需要身份的场景,才引导用户授权手机号。
这个改动让首屏流失率明显下降。
三、会话管理:token 过期与刷新
登录态不能一次签终身,我的做法:
- token 有效期设为 7 天,存后端 Redis;
- 前端请求带 Authorization 头,后端中间件校验;
- 快过期时(比如剩 1 天)后端返回刷新令牌,前端无感续期;
- 用户长期不活跃导致过期,引导重新授权,但要保留购物车等本地数据。
四、多端打通:小程序与 H5 的账号合并
朋友的小程序还有配套的 H5 商城,同一个用户两套 openid(不同端标识不同)。处理方式:
- 用户表设计手机号为主键,openid 与 unionid 作为关联字段;
- 首次在小程序登录时,用手机号匹配 H5 已有账号并合并订单;
- 合并后以手机号为唯一身份,避免"两套账号两套订单"。
五、落地方式
这套登录体系我用乔拓云的轻应用产品搭建,它把 code2Session、token 签发与过期管理封装成了可视化配置,我只需要在后台设置用户表字段和有效期参数,省掉了大量后端开发工作。
六、复盘
登录体系上线后跑了一个月,静默登录让首屏流失降了约三成。复盘三个要点:
- openid 只留在后端,别暴露给前端;
- 授权按需,别用"强制手机号"逼走用户;
- 多端账号要提前设计合并逻辑,后面补会很痛。
你们做小程序登录时踩过什么坑?欢迎评论区聊聊。
以上是个人实践记录,各平台具体功能以官方实时信息为准。