小红书云托管提供的是后端云服务,从一定程度上来说,和之前使用的服务器一样,都是为小程序的运行提供后端支撑的。
小红书云托管有很多优势,除了容器化之外,最核心的,就是其强大的小红书生态属性。
当服务端要判定一个小程序用户到底是谁的时候,原始登录流程如下:
通过小程序的

由此我们可以判定身份,将自己业务的用户库和小红书的用户体系关联起来。
后端服务需要根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。在调用
当项目从服务器迁移到小红书云中进行云托管时,
在小程序/小组件端,通过
HTTP header | 说明 |
|---|---|
xhs-open-id | xhs openid |
xhs-cloud-env-id | 云环境 ID |
xhs-cloud-function-id | 云函数 ID |
xhs-app-id | 小程序 AppID |
环境变量 | 说明 |
|---|---|
XHS_CLOUD_ENV_ID | 云环境 ID |
XHS_CLOUD_FUNCTION_ID | 云函数 ID |
XHS_CLOUD_ENV_VERSION | 云函数版本(IDE 内默认 LATEST) |
XHS_APP_ID | 小程序/组件 appid |
在此可以直接从 HTTP header 中拿到信息后做业务判定,然后进行业务正常服务。
这个能力是不带任何条件的,小程序只要使用
不仅省去了
/**
* 获取用户信息示例函数
*
* 功能:
* - 从 HTTP header 中获取云托管相关信息
* - 从环境变量中获取云函数配置信息
* - 演示如何在云函数中使用免登录能力
*
* 示例:
* - GET /user/info
*/
exports.getUserInfo = async function getUserInfo(event, context) {
console.log('[getUserInfo] 函数调用开始', {
ctxId: context?.ctxId,
eventID: context?.eventID,
timestamp: new Date().toISOString(),
});
// 从 HTTP header 中获取云托管相关信息
const envId = context.headers['xhs-cloud-env-id'];
const functionId = context.headers['xhs-cloud-function-id'];
const appId = context.headers['xhs-app-id'];
if (!envId) {
console.log('[getUserInfo] 错误:xhs-cloud-env-id 为空');
return {
ok: false,
code: 400,
message: "MISSING_ENV_ID",
detail: "xhs-cloud-env-id 为空",
};
}
// 从环境变量获取云函数配置信息
const cloudEnvId = process.env.XHS_CLOUD_ENV_ID;
const cloudFunctionId = process.env.XHS_CLOUD_FUNCTION_ID;
const cloudEnvVersion = process.env.XHS_CLOUD_ENV_VERSION;
const appIdFromEnv = process.env.XHS_APP_ID;
console.log('[getUserInfo] 获取到的信息', {
headers: {
envId,
functionId,
appId,
},
envVars: {
cloudEnvId,
cloudFunctionId,
cloudEnvVersion,
appIdFromEnv,
},
});
return {
ok: true,
code: 0,
message: "GET_USER_INFO_OK",
data: {
headers: {
envId,
functionId,
appId,
},
envVars: {
cloudEnvId,
cloudFunctionId,
cloudEnvVersion,
appIdFromEnv,
},
note: "这些信息可以直接用于业务逻辑,无需额外的登录流程",
},
contentType: "application/json",
meta: {
ctxId: context.ctxId,
eventID: context.eventID,
eventType: context.eventType,
},
};
};
如果坚持使用原本的