×

微信小程序:先搞懂登录+用户信息的底层逻辑

作者:Terry2025.10.14来源:Web前端之家浏览:36评论:0

微信小程序:先搞懂登录+用户信息的底层逻辑

现在做小程序的人越来越多,不管是商家做线上生意,还是开发者接项目,“登录环节咋让用户授权、咋拿到信息”都是绕不开的事儿,但不少人一头雾水:点登录按钮后咋和微信后台交互?用户授权弹窗啥时候弹才合规?拿到信息后咋存、咋用才不违规?今天就把小程序登录+获取用户信息的流程、坑点、合规点一次性掰碎了讲明白~

很多人把“登录”和“获取用户信息”混为一谈,其实是两个环节:

登录是小程序和微信后台建立会话:用户点登录,小程序发个“code”给微信服务器,微信返回openid(用户在你小程序里的唯一标识)和session_key(会话密钥),相当于给这个用户开个“临时通行证”,后续操作(比如下单、存信息)能关联到这个用户。

获取用户信息是拿到用户授权的公开/私密数据:早年小程序能直接拉取用户信息,现在得用户主动点授权按钮(比如带open-type="getUserInfo"的按钮),才能拿到昵称、头像这些,要是想拿手机号,还得额外走getPhoneNumber的授权流程。

简单说:登录是“确认你是你”,获取信息是“你愿意把哪些信息给我”,流程上有先后,也能结合着做。

实操步骤:从前端到后端咋落地?

得前后端配合,分小程序端(用户手机上点的部分)和服务器端(后台处理数据的部分)来讲:

(1)小程序前端:触发登录+引导授权

先做登录触发:用wx.login()接口,逻辑是用户点“登录”按钮,小程序调用wx.login,拿到临时code(这玩意儿5分钟就失效,得赶紧传给后端)。

然后是用户信息授权:现在不能自动弹授权窗了,得用微信提供的<button>组件,给按钮加open-type属性,比如要拿基础信息(昵称、头像),就设open-type="getUserInfo";要拿手机号,设open-type="getPhoneNumber",用户点这个按钮,才会弹出微信的授权确认框。

举个场景:做个外卖小程序,登录按钮点了先执行wx.login拿code,同时页面上放个“允许获取头像昵称”的按钮,用户点了按钮,前端能拿到encryptedData(加密后的用户信息)和iv(加密向量),这些后面要传给后端解密。

(2)服务器后端:拿code换凭证+解密信息

后端得做两件核心事:

第一步,用code换openid和session_key:把前端传来的code,发到微信接口https://api.weixin.qq.com/sns/jscode2session,参数带上小程序的appidsecretcode,微信返回openid(用户唯一ID)、session_key(解密用户信息的钥匙),这一步必须后端做,因为appidsecret不能暴露在前端,否则被人扒了能伪造请求。

第二步,解密用户信息(如果需要):前端拿到的encryptedData是加密的,得用session_keyiv去解密,不同语言解密方式不一样,比如Node.js用crypto模块,PHP用openssl_decrypt函数,解密后才能拿到用户的真实昵称、头像、unionid(如果用户授权且小程序绑定开放平台)这些数据。

注意:如果只需要用户标识(openid),不用拿详细信息,那第二步可以跳过,减少用户授权负担。

用户授权环节的“合规+体验”坑点

很多小程序被拒审,或者用户骂体验差,都是授权环节没处理好,这几个点必须盯紧:

(1)不能“强逼”用户授权

微信明确规定:授权弹窗必须用户主动触发,不能一进小程序就自动弹,也不能把授权和核心功能绑架(比如不授权就不让进首页),正确做法是:先让用户能浏览基础内容,点“登录享优惠”这类按钮时再引导授权。

(2)用户拒绝授权后咋处理?

用户第一次点授权选了“拒绝”,之后再点按钮不会自动弹授权窗了,这时候得做“重新引导”:比如弹窗提示“需要你的头像昵称才能生成专属名片,去设置里打开权限哦~”,引导用户去微信设置里手动开授权。

(3)授权信息的“必要性”

别为了“收集数据”而要信息,比如做工具类小程序,只需要用户标识(openid)就能记录使用记录,就别要昵称头像;做社交类小程序,要头像昵称才合理,过度索取信息会让用户反感,也违反《个人信息保护法》。

开发时最容易踩的“技术坑”

流程走通了,技术细节没处理好也会崩,这几个高频问题得提前避坑:

(1)code过期导致登录失败

wx.login拿到的code只有5分钟有效期,所以前端拿到code后要立刻传给后端,别存到本地等半天再发,后端收到code后,也得马上调用微信接口换session_key,超时了code就废了,用户得重新点登录。

(2)session_key过期或被盗用

session_key和用户会话绑定,用户退出小程序再进来,session_key可能失效(微信会不定期刷新),如果拿旧的session_key解密用户信息,就会解密失败,解决办法:后端定期刷新session_key,或者每次解密失败后,引导用户重新登录(触发wx.login换新的code和session_key)。

(3)多端小程序的差异

要是同时做微信、支付宝、抖音小程序,每个平台的授权接口不一样,比如支付宝小程序用my.getAuthCode,抖音用tt.login,得针对每个平台单独处理授权逻辑,不能直接照搬微信的代码。

合规红线:用户信息咋存、咋用?

现在用户信息是“敏感资产”,法律和平台规则卡得严,这几点踩了轻则审核不通过,重则吃罚单:

  • 收集环节:必须明确告知用户“收集啥信息、用来干啥”,比如弹窗写“为了给你生成个性化订单页,需获取你的昵称和头像”,用户点同意才算数。

  • 存储环节:用户信息要加密存储(比如数据库里存加密后的手机号),别明文放服务器里,防止被拖库泄露。

  • 使用环节:只能用在用户授权的场景里,不能把用户手机号卖给第三方,也不能拿昵称去做营销短信群发(除非用户单独授权营销用途)。

小程序登录+获取用户信息是个“前端引导+后端解密+合规兜底”的组合活,流程上要把登录和授权拆明白,技术上盯紧code和session_key的时效性,体验上别强逼用户授权,合规上守住信息收集使用的边界,把这些环节理顺了,用户登录顺滑,小程序也能安全合规地跑起来~要是你还有具体场景的问题(比如做社区小程序咋设计授权流程),评论区随时聊~

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/xiaochencusdjf23523.html

网友评论文明上网理性发言已有0人参与

发表评论: