当前位置: 首页 > news >正文

【微信小程序 + 登录流程】微信小程序授权登录完整流程,一篇搞定!(含代码实现)

前言

只要开始写一个微信小程序,必要的登录流程每次都要再理一下逻辑,记录一下思路,以便于后面自己食用。
大家有什么更好的思路可以分享~后面想创建一个学习小组,有兴趣的小伙伴可以联系我。

文章目录

  • 前言
    • 一、小程序微信授权登录
        • 1.登录态检查(节点 B)
        • 2.获取临时凭证 `code`(节点 D)
        • 3. 开发者服务器换用户标识(节点 F-G)
        • 4. 生成自定义登录态(节点 H)
        • 5.登录态存储与使用(节点 J-L)
    • 二、 需用户信息授权(如获取头像、昵称)
    • 三、小程序获取手机号登录
        • 1. 前置:获取临时登录凭证 code(节点 D)
        • 2. 触发手机号授权(节点 E-F)
        • 3. 获取加密手机号数据(节点 H)
        • 4. 服务器解密手机号(节点 J-L)
        • 5. 关联用户与生成登录态(节点 M)
        • 6. 登录态存储与后续使用(节点 N-P)
    • 四、具体代码实现
        • 1.需求示例
        • 2.代码实现(这里以页面上显示登录按钮为例)
    • 五、关键注意事项
        • 1.解密失败排查:
        • 2.用户拒绝授权处理:
        • 3.安全性要求:

一、小程序微信授权登录

1.登录态检查(节点 B)
  • 操作方:小程序前端
  • 目的:避免重复登录,提升用户体验
  • 实现
    • 前端通过wx.getStorageSync('token')检查本地是否存储了有效的自定义登录态(如Token)。
    • 若有Token,直接携带Token请求开发者服务器验证有效性,有效则进入主页;
    • 若无TokenToken已过期,触发登录流程。
2.获取临时凭证code(节点 D)
  • 操作方:小程序前端
  • 核心接口wx.login()
  • 说明
    • 调用后微信客户端会向微信服务器请求,返回一个 一次性、有效期 5 分钟 的code(临时登录凭证,仅能使用 1 次);
    • 此步骤 无需用户手动授权(静默获取,不弹授权弹窗)。

文档直通车: 开放接口/登录/wx.login

3. 开发者服务器换用户标识(节点 F-G)
  • 操作方:开发者服务器
  • 核心接口:微信官方auth.code2Session接口(GET 请求)
  • 请求参数(必须包含)
参数名来源说明
appid小程序管理后台获取小程序唯一标识
secret小程序管理后台获取小程序密钥(需保密,不可暴露在前端)
js_code前端传递的code临时登录凭证
grant_type固定值"authorization_code"
  • 返回结果(微信服务器返回给开发者服务器)
    • openid:用户在当前小程序的 唯一标识(每个用户对每个小程序的openid不同);
    • session_key:微信服务器与开发者服务器之间的 加密密钥(用于解密用户敏感信息,如手机号、头像昵称,需保密存储);
    • code无效(如过期、重复使用),会返回错误码(如40029)。

文档直通车: 小程序登录/小程序登录

4. 生成自定义登录态(节点 H)
  • 操作方:开发者服务器
  • 核心目的:避免直接使用openid/session_key传输,提升安全性
  • 常见方案
    • openid查询数据库,判断是否为新用户(新用户则创建用户记录,老用户则更新session_key);
    • 生成自定义登录态(如JWT Token、随机字符串),并将Tokenopenidsession_key关联存储(如存入RedisMySQL);
    • Token需设置有效期(如 7 天),过期后需重新登录。
5.登录态存储与使用(节点 J-L)
  • 前端存储:用wx.setStorageSync('token', 开发者返回的 Token)保存到本地,下次打开小程序时可直接读取;
  • 后续请求:前端发起业务请求(如 “获取我的订单”)时,在请求头(如Authorization: Bearer Token)或参数中携带Token
  • 服务器验证:开发者服务器接收请求后,先验证Token有效性(如检查Token是否存在、是否过期),验证通过则返回数据,否则返回 “登录失效”,前端需重新触发登录流程。

二、 需用户信息授权(如获取头像、昵称)


注意:微信已废弃旧的wx.getUserInfo()接口,当前需用wx.getUserProfile()且必须用户手动点击 “允许” 才能获取信息,不可静默授权。

文档直通车: 开放接口 /用户信息 /wx.getUserProfile

三、小程序获取手机号登录

1. 前置:获取临时登录凭证 code(节点 D)
  • 操作方:小程序前端
  • 核心接口wx.login()
  • 说明:与基础登录流程一致,静默获取 一次性、5 分钟有效期 的code,用于后续换取session_key(解密手机号的关键密钥),此步骤无需用户授权。
2. 触发手机号授权(节点 E-F)

文档直通车: 表单组件 /button

  • 操作方:小程序前端 + 用户
  • 核心组件:需用小程序原生button组件,且设置open-type="getPhoneNumber"(仅该类型按钮能触发手机号授权弹窗),示例代码:
<!-- WXML --><buttonopen-type="getPhoneNumber<
http://www.jsqmd.com/news/491007/

相关文章:

  • 终极指南:bootstrap-datepicker版本迁移中的API变更与适配技巧
  • 梳理靠谱的PLC编程学习机构,自学与机器人控制编程怎么收费 - 工业设备
  • 解决SegmentTabLayout的setTabSpaceEqual属性使用误区:从源码到实战的全面解析
  • Linux 进程控制(二) (进程等待wait/waitpid)
  • 如何在5分钟内快速部署Cnblogs-Theme-SimpleMemory主题?新手必备指南
  • nginx-rtmp-module高级配置:直播录制、转码与HTTP回调实战指南
  • CPPM注册职业采购经理证书详解 - 众智商学院官方
  • DeOldify开源大模型部署教程:国产昇腾/寒武纪平台适配可行性分析
  • 利群金卡回收五种精选方法:告别闲置,让消费更自由 - 猎卡回收公众号
  • 华为OD机试双机位C卷-编程能力提升计划 (Py/Java/C/C++/Js/Go)
  • 【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)
  • 闲置微信立减金别扔!可可收专业平台一键回收,安全高效超省心 - 可可收
  • 一级减速器2.2KW
  • MusePublic开源镜像案例:美术馆用AI复原残损壁画的实践路径
  • 华为OD机试双机位C卷-AI面板识别(Py/Java/C/C++/Js/Go)
  • MusePublic Art Studio效果展示:低光照场景下细节保留能力实测
  • java里内存、GC、性能调优的常用方法
  • 乙巳马年春联生成终端企业级落地:API封装+品牌LOGO嵌入实操手册
  • Janus-Pro-7B快速上手:无需GPU环境也能跑通的开源多模态模型
  • VideoAgentTrek-ScreenFilter多场景落地:UI测试、内容审核、无障碍适配三合一
  • python组合数据类型之元组类型字典类型实例
  • 聚合万媒,智链未来:软盟发稿平台打造2026企业对外传播“超级枢纽” - 新闻快传
  • 开源轻量影像工具:Jimeng AI Studio (Z-Image Edition)镜像免配置部署指南
  • GLM-4.7-Flash行业落地:金融研报自动生成与关键信息抽取实战
  • Jmeter接口测试实战:接口加密、接口解密、签名sign接口实战
  • EVA-01实战教程:构建企业内部知识库视觉检索终端——EVA-01+向量数据库集成
  • 工业组态 × 数据大屏 × ThingsBoard:SceneV 数据大屏可视化
  • 聊聊2026年高可靠指示灯靠谱供应商,哪家性价比更高 - 工业品牌热点
  • 浦语灵笔2.5-7B企业应用:内容审核场景下敏感图像描述实测
  • 【2026-03-16】频繁起夜