跳转至内容
There is a version suitable for your browser's language settings. Would you like to go to the english language of the site?
主页文档

元数据

H1

Middleware 章节中,我们编写了一个确保用户登录的中间件。但是,并非所有的 API 都需要使用它。我们就可以通过在API中设置 meta 选项,来使中间件可以知晓哪些 API 希望自身不需要它的保护。

Meta 类型的定义位于 /src/meta.ts 文件中,你可以根据需要自由扩展它。我们首先需要可以在 API 中告诉中间件:我允许不登录的用户访问我。

因此,我们添加一个 allowWithoutLogin 的选项。

/src/meta.ts
export type Meta = {
allowWithoutLogin?: boolean;
};

现在我们可以 API 中,为 meta 中设置这个值了。

/src/app/your-example/api.ts
export const api = defineApi({
meta: {
allowWithoutLogin: true,
},
action(params: undefined, context) {
return `你好世界!`;
},
});

我们转移到中间件中,通过 useMeta 函数,我们可以读取任何一个 API 的 meta 选项。现在,我们通过判断 allowWithoutLogin 选项,来确认是否允许不登录的用户访问这个 API。如果 API 没这个选项,或者为 false,我们就认为这个 API 需要我们的保护,反之,我们就不做任何多余的事情。

/src/middlewares/ensure-logined-middleware.ts
export const ensureLoginedMiddleware = defineMiddleware({
beforeExecute: async (context) => {
const meta = await useMeta(context.path);
if (meta.allowWithoutLogin === undefined || !meta.allowWithoutLogin) {
const token = context.headers.get("Authorization");
if (token !== "xxxx-xxxx-xxxx-xxxx") throw reject("DEVICE_NOT_LOGIN", "这个设备上还没有登录");
}
},
});