Token导航 LogoToken导航

Agent Skill · 前端设计

aptx-api-plugin-auth(aptx API plugin auth 文档)

用于辅助 API 设计、接口文档、请求响应结构和服务集成说明。它适合让 Agent 梳理 endpoint、生成 OpenAPI 草稿、检查字段命名、整理错误码或辅助前后端联调。使用时需要确认真实业务语义、鉴权方式、分页和错误处理规则;涉及生成接口文档时,应避免凭空补字段,最好从现有代码、schema 或接口样例中提取事实。

aptx-api-plugin-auth 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 6,192。

总安装 541周安装 23GitHub Stars 公开资料未说明下载 190核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:aptx-api-plugin-auth(aptx API plugin auth 文档)
来源仓库:https://github.com/haibaraaiaptx/aptx-skill
仓库路径:skills/aptx-api-plugin-auth
安装命令:
npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plugin-auth
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plugin-auth

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

aptx-api-plugin-auth 提供认证插件集成方案,支持 token 存储抽象与自动刷新机制。适用于需要安全处理登录态和 token 管理的 Web 应用,推荐使用中间件模式挂载到请求客户端。

必须实现 TokenStore 接口,搭配 cookie 或 SSR 专用存储层,并配置 refreshToken 回调。安装命令为 npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plugin-auth。

注意刷新失败时应清理会话,且不要在事件回调中修改 payload 内容。

来源仓库内路径:skills/aptx-api-plugin-auth

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plug…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

aptx-api-plugin-auth 怎么安装?

在终端执行 npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plugin-auth。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

aptx-api-plugin-auth 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

aptx-api-plugin-auth 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

aptx-api-plugin-auth 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

aptx-api-plugin-auth 用的人多吗?

公开数据是累计安装 541 次,近一周安装 23 次,下载 190 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

aptx-api-plugin-auth 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
aptx-api-plugin-auth

aptx API plugin auth 文档 · 本页

541—接触敏感数据未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

aptx-api-plugin-auth

目录


工作流程

在接入认证插件时,执行以下流程:

  1. 强制使用 TokenStore 抽象,不直接在业务代码里散落 token 读写。
  2. 创建 createAuthMiddleware({store, refreshToken,...}) 并挂到 RequestClient.use(...)。
  3. refreshToken 返回 {token, expiresAt} 或 string,优先返回 expiresAt 以便存储层同步过期时间。
  4. 使用 shouldRefresh 定义触发刷新条件;默认仅在 HttpError(401) 时刷新。
  5. 配置 onRefreshFailed 处理刷新失败后的业务动作(例如清理会话或跳转登录)。

默认推荐搭配:

  • @aptx/token-store(TokenStore 接口定义)
  • @aptx/token-store-cookie(浏览器 cookie 实现)
  • SSR:@aptx/token-store-ssr-cookie(Node/SSR request-scoped cookie 实现)

TokenStore 接口

store 参数支持三种形式(TokenStoreResolver 类型):

type TokenStoreResolver =
  | TokenStore                    // 直接实例(向后兼容)
  | (() => TokenStore)            // 同步工厂函数
  | (() => Promise<TokenStore>);  // 异步工厂函数(SSR)

TokenStore 接口(由 @aptx/token-store 提供):

interface TokenStore {
  // 获取存储的 token
  getToken(): string | undefined | Promise<string | undefined>;

  // 存储 token(可选 meta 用于支持过期时间和其他元数据)
  setToken(token: string, meta?: { expiresAt?: number; [key: string]: unknown }): void | Promise<void>;

  // 清除 token
  clearToken(): void | Promise<void>;

  // --- 可选扩展方法 ---

  // 获取元数据(用于读取 expiresAt)
  getMeta?(): Promise<{ expiresAt?: number } | undefined>;

  // 获取完整记录(token + meta)
  getRecord?(): Promise<{ token: string; meta?: { expiresAt?: number } } | undefined>;
}

使用场景

形式场景说明
直接实例浏览器端单例模式,所有请求共享同一 store
同步工厂函数浏览器端(推荐)保持 API 一致性
异步工厂函数SSR 端每请求独立 store,从请求上下文读取 cookie

推荐实现:

  • @aptx/token-store-cookie - 浏览器 cookie 存储(自动跨标签页同步)
  • @aptx/token-store-ssr-cookie - SSR cookie 存储(每请求独立)
  • 自定义实现(如 localStorage、sessionStorage、IndexedDB)

中间件模式(推荐)

浏览器端

最小模板:

import { createAuthMiddleware } from "@aptx/api-plugin-auth";
import { createCookieTokenStore } from "@aptx/token-store-cookie";

const store = createCookieTokenStore({
  tokenKey: "aptx_token",
  metaKey: "aptx_token_meta",
  syncExpiryFromMeta: true,
});

const auth = createAuthMiddleware({
  store, // 或使用工厂函数: store: () => store
  refreshLeewayMs: 60_000,
  refreshToken: async () => {
    return { token: "new-token", expiresAt: Date.now() + 30 * 60 * 1000 };
  },
});

SSR 端(Next.js App Router)

SSR 环境需要为每个请求创建独立的 store,因为 cookie 需要从请求上下文读取。

重要:服务端默认不处理 token 刷新,刷新由客户端处理。

import { cookies } from "next/headers";
import { createAuthMiddleware } from "@aptx/api-plugin-auth";
import { createSsrCookieTokenStore } from "@aptx/token-store-ssr-cookie";

// 创建请求级别的 API 客户端
export async function createServerApiClient() {
  const cookieStore = await cookies();

  const auth = createAuthMiddleware({
    // 异步工厂函数:每次请求创建独立 store
    store: async () => createSsrCookieTokenStore({
      tokenKey: "aptx_token",
      metaKey: "aptx_token_meta",
      getCookieHeader: () => cookieStore.toString(),
      setCookie: (value) => {
        // 解析 Set-Cookie 并调用 cookieStore.set()
      },
    }),
    // 注意:服务端不需要 refreshToken,刷新由客户端处理
    // refreshToken 会被忽略
  });

  return createApiClient().use(auth);
}

关键点:

  • 使用异步工厂函数 async () => store
  • 每次调用中间件都会执行工厂函数,获取该请求的 store 实例
  • 不同请求的 store 实例完全隔离,避免 token 串用
  • 服务端不处理刷新:收到 401 直接抛出错误,由客户端处理跳转登录

控制器模式(手动 token 管理)

对于需要手动控制 token 的场景(如手动刷新、预加载 token):

import { createAuthController } from "@aptx/api-plugin-auth";

const controller = createAuthController({
  store,
  refreshToken: async () => ({ token: "...", expiresAt: Date.now() + 30000 }),
});

// 手动触发刷新并返回新 token
const token = await controller.refresh();

// 确保返回有效 token(接近过期时自动刷新)
const validToken = await controller.ensureValidToken();

AuthController 方法:

  • refresh(): Promise<string> - 强制刷新 token 并返回新 token
  • ensureValidToken(): Promise<string> - 返回有效 token,接近过期时自动刷新

配置选项

AuthPluginOptions

选项类型必填默认值说明
storeTokenStoreResolver✅-Token 持久化抽象(支持直接实例、同步工厂、异步工厂)
refreshToken`Promise<{token, expiresAt?} \string>`✅-刷新 token 的异步函数(仅客户端生效)
refreshLeewayMsnumber❌60_000提前刷新的时间窗口(毫秒)
shouldRefresh(error, req, ctx) => boolean❌401 检查判断是否需要刷新的条件(仅客户端生效)
onRefreshFailed(error) => void❌-刷新失败回调(仅客户端生效)
headerNamestring❌"Authorization"自定义 header 名称
tokenPrefixstring❌"Bearer "Token 前缀
maxRetrynumber❌1刷新失败后重试次数(仅客户端生效)

注意:服务端(SSR)环境下,refreshToken、shouldRefresh、onRefreshFailed、maxRetry 会被忽略,因为服务端默认不处理 token 刷新。

refreshToken 返回值

refreshToken 可以返回两种格式:

  1. 推荐格式(包含过期时间):
return {
  token: "new-token",
  expiresAt: Date.now() + 30 * 60 * 1000, // 30 分钟后过期
};
  1. 简单格式(仅 token):
return "new-token"; // 适用于不需要过期时间的场景

优先返回包含 expiresAt 的对象,便于存储层(如 @aptx/token-store-cookie)同步过期时间。

自定义 header 配置

对于非标准认证方案(如自定义 header 或无 Bearer 前缀):

const auth = createAuthMiddleware({
  store,
  refreshToken: async () => ({ token: "custom-token" }),
  headerName: "X-Auth-Token",      // 自定义 header 名称
  tokenPrefix: "",                  // 移除 Bearer 前缀
  maxRetry: 2,                      // 增加重试次数
});

自定义 shouldRefresh 条件

默认仅在 401 状态码时触发刷新。如需自定义逻辑:

const auth = createAuthMiddleware({
  store,
  refreshToken: async () => ({ token: "..." }),
  shouldRefresh: (error, req, ctx) => {
    // error: { status?: number, message?: string, code?: string }
    return error.status === 401 || error.code === "TOKEN_EXPIRED";
  },
});

参数说明:

  • error: 错误对象,包含 status(HTTP状态码)、message(错误消息)、code(业务错误码)
  • req: 原始请求对象
  • ctx: 上下文对象

重试策略

maxRetry 控制刷新失败后的重试次数:

  • maxRetry: 0 - 刷新失败后立即抛出错误
  • maxRetry: 1 (默认) - 刷新失败后重试一次
  • maxRetry: 2 - 刷新失败后重试两次

刷新失败时会自动调用 store.clearToken() 清除本地 token。

导出常量

SKIP_AUTH_REFRESH_META_KEY

用于标记请求跳过 auth 刷新逻辑,避免 refreshToken 请求本身返回 401 时触发死锁。

import { SKIP_AUTH_REFRESH_META_KEY } from "@aptx/api-plugin-auth";

// 在 refreshToken 请求的 spec 中添加此标记
const refreshTokenSpec = {
  method: "POST",
  path: "/api/refresh-token",
  meta: { [SKIP_AUTH_REFRESH_META_KEY]: true },
};

使用场景:当 refreshToken 回调使用同一个 apiClient 发起刷新请求时,必须添加此标记。


错误处理

const auth = createAuthMiddleware({
  store,
  refreshToken: async () => {
    const res = await fetch("/api/refresh");
    if (!res.ok) throw new Error("Refresh failed");
    return await res.json();
  },
  onRefreshFailed: (error) => {
    // 刷新失败后的业务动作(仅客户端执行)
    console.error("Auth refresh failed:", error);
    // 例如:跳转登录页、清除用户状态、显示登录弹窗
    window.location.href = "/login";
  },
});

注意:onRefreshFailed 仅在客户端执行。服务端收到 401 时会直接抛出错误,不调用此回调。


关键约束

  • store 必填且是唯一 token 持久化入口,必须实现 TokenStore 接口。
  • refreshToken 尽量返回 expiresAt,便于存储层处理过期时间。
  • 若刷新失败,必须由 onRefreshFailed 统一处理业务动作(仅客户端生效)。
  • shouldRefresh 默认仅在 HttpError(401) 时触发刷新,其他错误不会刷新(仅客户端生效)。
  • 服务端默认不处理 token 刷新:服务端收到 401 直接抛出错误,刷新由客户端处理。

何时不使用

  • 静态 API 调用:无需用户认证的公开接口不需要使用此插件
  • 服务端到服务端认证:应使用 API Key 或应用级凭证,而非用户 token
  • 仅需一次性认证:如果只需在应用启动时获取一次 token,无需自动刷新,可直接使用 createAuthController 而不挂载中间件

高级主题

刷新请求死锁保护

重要:如果 refreshToken 回调使用同一个 apiClient 发起请求,必须使用 SKIP_AUTH_REFRESH_META_KEY 标记刷新请求。

问题场景:

1. 请求 A → 401
2. auth 中间件调用 refreshToken()
3. refreshToken 请求经过 auth 中间件 → 401
4. auth 中间件再次调用 refreshToken() → 死锁!

解决方案:

import { SKIP_AUTH_REFRESH_META_KEY } from "@aptx/api-plugin-auth";

// refreshToken 请求的 spec 必须添加跳过标记
export function buildRefreshTokenSpec(): RequestSpec {
  return {
    method: "POST",
    path: "/api/refresh-token",
    meta: { [SKIP_AUTH_REFRESH_META_KEY]: true },  // 关键!
  };
}

边缘情况处理

详见 edge-cases.md,包含:

  • 并发刷新防止
  • Token 验证
  • 网络错误重试
  • 跨标签页 Token 同步
  • 无限刷新与死锁保护

平台分布

Codex

37.54%
按下载量换算71

Claude

31.35%
按下载量换算60

Cursor

17.67%
按下载量换算34

Gemini CLI

9.07%
按下载量换算17

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills