微信小程序登录鉴权是开发中非常关键的一环。小程序端调用微信接口获取登录凭证 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_key
。openid
是识别用户的关键。
以下是一个 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,
};
}
说明:
appid
和secret
需妥善保管,不要泄露给客户端;- 该接口返回的
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
,结合自身业务逻辑完成用户登录,是开发安全小程序的标准流程。理解并掌握该流程,有助于构建完善的用户鉴权体系。