微信小程序鉴权登录详解 —— 基于 wx.login 与后端 openid 换取流程

微信小程序登录鉴权是开发中非常关键的一环。小程序端调用微信接口获取登录凭证 code,后端利用该 code 换取用户身份标识 openid,结合业务逻辑完成用户鉴权。本文详细介绍这一流程,并给出后端用 code 换取 openid 的示例代码。


1. wx.login():获取登录凭证 code

微信小程序调用 wx.login(),由微信服务器生成一个临时登录凭证 code。该 code 有效期短,且只能用一次,用于证明此次登录请求的合法性。

示例:

js 复制代码
wx.login({
  success(res) {
    if (res.code) {
      // 将 res.code 发送给后端,完成身份验证
    }
  }
});

2. 发送 code 到后端进行身份校验

小程序端将 code 通过 HTTP 请求发送到后端,后端通过微信官方接口验证并获取用户身份。

js 复制代码
wx.request({
  url: 'https://your-api.com/api/login.wx',
  method: 'POST',
  data: { code: res.code },
  success(loginRes) {
    wx.setStorageSync('token', loginRes.data.token);
  }
});

3. 后端用 code 换取 openid

后端收到 code 后,通过调用微信官方接口换取用户的唯一身份标识 openid 和会话密钥 session_keyopenid 是识别用户的关键。

以下是一个 Node.js 环境中用 fetch 调用微信接口的示例:

js 复制代码
import fetch from 'node-fetch';

async function getOpenIdAndSessionKey(code) {
  const appid = process.env.WX_APPID;       // 小程序 AppID
  const secret = process.env.WX_SECRET;     // 小程序 AppSecret

  const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`;

  const response = await fetch(url);
  const data = await response.json();

  if (data.errcode) {
    throw new Error(`微信接口错误: ${data.errmsg}`);
  }

  return {
    openid: data.openid,
    session_key: data.session_key,
  };
}

说明:

  • appidsecret 需妥善保管,不要泄露给客户端;
  • 该接口返回的 openid 是微信小程序用户的唯一标识;
  • session_key 可用于解密用户敏感数据。

4. 后端查找或创建用户

拿到 openid 后,后端在数据库中查询该用户是否存在:

  • 若存在,直接返回对应用户数据;
  • 若不存在,创建新用户记录。

这保证了用户身份的唯一对应。


5. 签发 Token 并返回小程序

后端基于用户信息生成 Token(如 JWT),该 Token 用于后续接口鉴权,保证接口安全。

js 复制代码
const token = signJwt({ uid: user.id, openid: user.openid });
return { token };

小程序保存该 Token,后续请求携带 Token 访问受保护接口。


6. 小程序保存 Token 并带 Token 请求

小程序端使用 wx.setStorageSync 保存 Token:

js 复制代码
wx.setStorageSync('token', token);

调用接口时带上 Token:

js 复制代码
const token = wx.getStorageSync('token');
wx.request({
  url: 'https://your-api.com/api/protected',
  method: 'GET',
  header: {
    Authorization: `Bearer ${token}`
  },
  success(res) {
    // 处理响应数据
  }
});

7. 小结

步骤 说明
1. 小程序调用 wx.login 获取临时登录凭证 code
2. 小程序发送 code 给后端 触发后端身份验证流程
3. 后端调用微信接口换取 openid 通过 code 获取微信用户唯一标识 openid
4. 后端查找/创建用户 确认用户身份并建立账号
5. 后端签发 Token 并返回 生成 JWT 供后续请求使用
6. 小程序保存 Token 并携带请求 保障接口访问的鉴权和安全

8. 结语

微信小程序登录流程通过 wx.login 获取 code,后端换取 openid,结合自身业务逻辑完成用户登录,是开发安全小程序的标准流程。理解并掌握该流程,有助于构建完善的用户鉴权体系。

相关推荐
一 乐9 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕9 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫10 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo10 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo11 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq11 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴11 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq12 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
anyup13 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
BBBBBAAAAAi13 小时前
Claude Code安装记录
开发语言·前端·javascript