微信小程序鉴权登录详解 —— 基于 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,结合自身业务逻辑完成用户登录,是开发安全小程序的标准流程。理解并掌握该流程,有助于构建完善的用户鉴权体系。

相关推荐
掘金安东尼4 分钟前
前端周刊第419期(2025年6月16日–6月22日)
前端·javascript·面试
bemyrunningdog9 分钟前
AntDesignPro前后端权限按钮系统实现
前端
重阳微噪13 分钟前
Data Config Admin - 优雅的管理配置文件
前端
Hilaku16 分钟前
20MB 的字体文件太大了,我们把 Icon Font 压成了 10KB
前端·javascript·css
fs哆哆20 分钟前
在VB.net中,文本插入的几个自定义函数
服务器·前端·javascript·html·.net
专注VB编程开发20年23 分钟前
C# .NET多线程异步记录日声,队列LOG
java·开发语言·前端·数据库·c#
慧慧吖@39 分钟前
箭头函数的this指向
开发语言·前端·javascript
锈儿海老师41 分钟前
关于平凡AI 提示词造就世界最强ast-grep 规则这件事
前端·javascript·人工智能
LetsonH1 小时前
配置MCP报错npm error code EPERM
前端·npm·node.js
云墨-款哥的博客1 小时前
创建 Vue 3.0 项目的两种方法对比:npm init vue@latest vs npm init vite@latest
前端·vue.js·npm